๐ ๋ฐฑ์ค 1874 ๋ฌธ์ https://www.acmicpc.net/problem/1874
๋ฌธ์
์คํ (stack)์ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก, ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ์์ฃผ ์ด์ฉ๋๋ ๊ฐ๋ ์ด๋ค. ์คํ์ ์๋ฃ๋ฅผ ๋ฃ๋ (push) ์ ๊ตฌ์ ์๋ฃ๋ฅผ ๋ฝ๋ (pop) ์ ๊ตฌ๊ฐ ๊ฐ์ ์ ์ผ ๋์ค์ ๋ค์ด๊ฐ ์๋ฃ๊ฐ ์ ์ผ ๋จผ์ ๋์ค๋ (LIFO, Last in First out) ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
1๋ถํฐ n๊น์ง์ ์๋ฅผ ์คํ์ ๋ฃ์๋ค๊ฐ ๋ฝ์ ๋์ด๋์์ผ๋ก์จ, ํ๋์ ์์ด์ ๋ง๋ค ์ ์๋ค. ์ด๋, ์คํ์ pushํ๋ ์์๋ ๋ฐ๋์ ์ค๋ฆ์ฐจ์์ ์งํค๋๋ก ํ๋ค๊ณ ํ์. ์์์ ์์ด์ด ์ฃผ์ด์ก์ ๋ ์คํ์ ์ด์ฉํด ๊ทธ ์์ด์ ๋ง๋ค ์ ์๋์ง ์๋์ง, ์๋ค๋ฉด ์ด๋ค ์์๋ก push์ pop ์ฐ์ฐ์ ์ํํด์ผ ํ๋์ง๋ฅผ ์์๋ผ ์ ์๋ค. ์ด๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ๋ ฅ
์ฒซ ์ค์ n (1 โค n โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ n๊ฐ์ ์ค์๋ ์์ด์ ์ด๋ฃจ๋ 1์ด์ n์ดํ์ ์ ์๊ฐ ํ๋์ฉ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋ฌผ๋ก ๊ฐ์ ์ ์๊ฐ ๋ ๋ฒ ๋์ค๋ ์ผ์ ์๋ค.
์ถ๋ ฅ
์ ๋ ฅ๋ ์์ด์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ฐ์ฐ์ ํ ์ค์ ํ ๊ฐ์ฉ ์ถ๋ ฅํ๋ค. push์ฐ์ฐ์ +๋ก, pop ์ฐ์ฐ์ -๋ก ํํํ๋๋ก ํ๋ค. ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ NO๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
์์ด ์ ๋ ฅ์ด ๋ค์ด์ฌ ๋ seq ๋ณ์์ ํ ๋นํด์ฃผ์๊ณ ํด๋น ์๋งํผ stack ๋์ deque์ ์ค๋ฆ์ฐจ์์ผ๋ก ์๋ฅผ ๋ฃ์ด๊ฐ๋ฉฐ push๋ฅผ ํด ์ฃผ๊ณ StringBuilder๋ฅผ ํตํด ์ถ๋ ฅํ ๋ฌธ์์ด์ ํฉ์ณ์คฌ๋ค.
๊ทธ ๋ค์์ ์คํ์ ๊ฐ์ฅ ์์ ์๋ ํญ๋ชฉ์ด seq๊ฐ ์๋๋ผ๋ฉด ๋ฐ๋ก NO๋ฅผ ์ถ๋ ฅ์์ผ์ฃผ์๊ณ ์ด๋ฅผ ํต๊ณผํ๊ฒ๋๋ค๋ฉด ๋ค์ ์์ด์ ์ ๋งํผ pop์ ํด์ฃผ๋ฉฐ StringBuilder๋ฅผ ํตํด - ๋ฅผ ํฉ์ณ์ฃผ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Main {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Deque<Integer> deque = new ArrayDeque<>();
int n = Integer.parseInt(br.readLine());
int first = 0;
while (n-- > 0) {
int seq = Integer.parseInt(br.readLine());
if (seq > first) {
for (int i = ++first; i <= seq; i++) {
deque.push(i);
sb.append('+').append("\n");
}
first = seq;
} else if (deque.peek() != seq) {
System.out.println("NO");
return;
}
deque.pop();
sb.append('-').append("\n");
}
System.out.println(sb);
}
}