sm 기술 블로그
155. 1874(스택 수열) - 자바 본문
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int N = sc.nextInt();
int cnt = 0;
for (int i = 0; i < N; i++) {
int T = sc.nextInt();
while (cnt < T) {
cnt++;
stack.add(cnt);
sb.append("+").append("\n");
}
if (stack.get(stack.size() - 1) == T) {
sb.append("-").append("\n");
stack.pop();
}
else {
System.out.println("NO");
stack.add(1);
break;
}
}
if (stack.size() == 0) {
System.out.print(sb);
}
}
}
문제요약
스택을 이용하여 입력 값이 되도록 해라
설명
while (cnt < T) {
cnt++;
stack.add(cnt);
sb.append("+").append("\n");
}
입력값이 cnt 보다 작다면 1을 증가시켜 스택에 저장하고 +를 출력하기 위해 result 에 저장한다.
if (stack.get(stack.size() - 1) == T) {
sb.append("-").append("\n");
stack.pop();
}
else {
System.out.println("NO");
stack.add(1);
break;
}
만약 맨 뒤 값이 (스택은 LIFO[Last In First Out] 형식임) 입력값과 같다면 pop을 진행한다.
같지 않다면 NO를 출력하고 stack에 1을 저장한뒤 종료한다.
예를들어 4가 들어온다면
while문을 통해 stack에 1,2,3,4가 저장된다.
stack에 맨 뒤에 값이 4이므로 pop을 통해 출력하고 다음 입력값을 받는다.
if (stack.size() == 0) {
System.out.print(sb);
}
만약 스택이 비어있다면 result를 출력한다.
NO인경우 1을 저장하기 때문에 절때 스택이 비어서 나올 수 없다.
'문제 > 백준_자바' 카테고리의 다른 글
157. 18258(큐) - 자바 (0) | 2022.07.25 |
---|---|
156. 17298(오큰수) - 자바 (0) | 2022.07.25 |
154. 4949(균형잡힌 세상) - 자바 (0) | 2022.07.22 |
153. 9012(괄호) - 자바 (0) | 2022.07.21 |
151. 10828(스택) - 자바 (0) | 2022.07.20 |
Comments