문제/백준_자바
155. 1874(스택 수열) - 자바
sm_hope
2022. 7. 22. 16:02
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을 저장하기 때문에 절때 스택이 비어서 나올 수 없다.