ALGORITHM
백준 1874 스택 수열 (Java)
공부하는_다온
2023. 4. 23. 22:04
1. 문제 링크
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
입력받은 값이 지금 들어간 값보다 크면 값을 스택에 넣는다.
그 후에
입력받은 값이 들어가있는 값과 같으면 스택에서 꺼낸다.
입력받은 값이 들어가있는 값보다 작으면 top에 있는 것을 꺼낸다.
push와 pop을 반복하면서 해당 수열이 나오는지 확인하면 된다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
boolean flag = true;
int s = 0;
for(int i=0;i<N;i++) {
int num = Integer.parseInt(br.readLine());
while(s<num) {
stack.push(++s);
sb.append("+\n");
}
if(s == num) {
stack.pop();
sb.append("-\n");
}
else {
if(stack.peek()==num) {
stack.pop();
sb.append("-\n");
}
else {
flag = false;
break;
}
}
}
if(!flag) {
System.out.println("NO");
}
else {
System.out.println(sb);
}
}
}