Languages/Java
[BOJ 길라잡이/Java] 9일차 #1874 스택 수열
효딩
2025. 3. 21. 16:12
예제
첫 째 줄에 n이 주어지면
둘째 줄부터 주어진 1 이상 n 이하의 숫자가 주어진다.
스택을 이용해 입력된 수열을 만들려면 어떤 연산을 해야 하는지
push는 +로, pop은 -로 표현하도록 한다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
Stack<Integer> st = new Stack<>();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
int cur = 1; // 스택에 넣을 숫자
for (int i = 0; i < n; i++) {
int num = arr[i];
while (cur <= num) {
st.push(cur);
cur++;
sb.append("+\n");
}
if (st.peek() == num) {
st.pop();
sb.append("-\n");
} else {
System.out.println("NO");
return;
}
}
System.out.println(sb.toString());
}
}
arr에 n개의 숫자들을 차례대로 넣는다.
cur부터 num까지 숫자를 stack에 push하고,
stack의 peek이 num과 같으면 pop하고 같지 않으면 "NO"를 출력한다.