



내가 생각했을때 문제에서 원하는부분
첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다.
둘째 줄부터 n개의 줄에는 수열을 이루는 1이상 n이하의 정수가 하나씩 순서대로 주어진다.
물론 같은 정수가 두 번 나오는 일은 없다.
입력된 수열을 만들기 위해 필요한 연산을 한 줄에 한 개씩 출력한다.
push연산은 +로, pop 연산은 -로 표현하도록 한다. 불가능한 경우 NO를 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader StringBuilder를 사용했다.
입력 방법은 BufferedReader을 사용하여 풀었다.
N 번 반복
start + 1부터 입력받은 value 까지 push를 한다.
+ 를 저장한다.
다음 push 할 때의 오름차순을 유지하기 위한 변수 초기화
top에 있는 원소가 입력받은 값과 같이 않은 경우
코드로 구현
package baekjoon.baekjoon_19;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
// 백준 1874번 문제
public class Main662 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int n = Integer.parseInt(br.readLine());
int start = 0;
while(n -- > 0) {
int value = Integer.parseInt(br.readLine());
if(value > start) {
for(int i = start + 1; i <= value; i++) {
stack.push(i);
sb.append('+').append('\n');
}
start = value;
} else if(stack.peek() != value) {
System.out.println("NO");
return;
}
stack.pop();
sb.append('-').append('\n');
}
System.out.println(sb);
br.close();
}
}

백준에서 자료구조를 계속 풀고있는데 실제로 책에봤던 내용을 가지고 풀어보니깐 조금 어렵게 느껴졌다.