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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out););
List<Integer> list = new ArrayList<>();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
list.add(Integer.parseInt(br.readLine()));
}
Deque<Integer> deq = new ArrayDeque<>();
StringBuilder sb = new StringBuilder();
int num = 1;
int target = 0;
while (num <= N) {
deq.addLast(num++);
sb.append("+\n");
while (!deq.isEmpty() && deq.getLast().equals(list.get(target))) {
deq.removeLast();
sb.append("-\n");
target++;
}
}
if (!deq.isEmpty()) {
bw.write("NO\n");
} else {
bw.write(sb.toString());
}
bw.flush();
bw.close();
}
}
실패
ArrayDeque)성공
List.get(target) 의 값과 동일해질 때까지 deque에 담음List.get(target) 값이 동일한지 확인리뷰
스택이나 덱 자료구조를 쓸 때, 자꾸 stack.isEmpty() 조건을 빼먹어서 오류를 한번씩 내는것 같은데 조심해야할 것 같다.
그리고, 처음 결과를 제출했을 때는 StringBuilder 를 사용하지 않고 BufferedWriter 만 사용했더니
출력초과 에러를봤다…첨봤다. 데이터 갯수가 최대 10만개이므로, 출력값이 많은 경우 BufferedWriter 와 StringBuilder 를 함께 사용하는 방법을 사용해야겠다.