๋ฌธ์ ๋งํฌ - https://www.acmicpc.net/problem/1874
๐ ๋ฆฌ๋ทฐ
์ฒด๊ฐ ๋์ด๋: โญ๏ธโญ๏ธโญ๏ธ
โญ๏ธ - EZ
โญ๏ธโญ๏ธ - ๊ณ ๋ฏผ ์ข ํ๋ค..
โญ๏ธโญ๏ธโญ๏ธ - ๋ชปํ์๋ค… ํด์ค ๋ดค์
โญ๏ธโญ๏ธโญ๏ธโญ๏ธ - ํด์ค ๋ด๋ ๋ชจ๋ฅด๊ฒ ์ด
โญ๏ธโญ๏ธโญ๏ธโญ๏ธโญ๏ธ - ์ด๊ฑฐ ์ด๋ป๊ฒ ํ์์ง ๋ด๊ฐ..?
๋ฌธ์ ์ดํด
์ด ๋ฌธ์ ์์๋ ์ ๋ ฅ์ ๋ถ๋ฅ๊ฐ ๋ ๊ฐ์ง๋ค.
- ์ฒซ์งธ ์ค: ์์ด์ ํฌ๊ธฐ N์ ์ ๋ ฅ,
- ๋์จฐ ์ค๋ถํฐ ~ N๋ฒ์งธ ์ค: N๊ฐ์ ์์ด์ ์์๋ฅผ ์ ๋ ฅํ๋ค.
Stack์ 1๋ถํฐ n๊น์ง ์ฐจ๋ก๋ก ๊ฐ ์์๋ฅผ push ํน์, popํ์ฌ pop์ ํ ๊ฒฐ๊ณผ๊ฐ ์์ด์ ์์์ ๋์ผํด์ผ ํ๋ค.
์ฐ์ฐ ์ค์ push๋ฅผ ํ๋ค๋ฉด ‘+’๋ฅผ ์ถ๋ ฅํ๊ณ , pop์ ํ๋ค๋ฉด ‘-’๋ฅผ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์ด๋ ํ ์ฐ์ฐ์ผ๋ก๋ ์คํ์์ popํ ๊ฒฐ๊ณผ๊ฐ ์์ด๊ณผ ๋์ผํ ์ ์๋ค๋ฉด ‘NO’๋ฅผ ์ถ๋ ฅํ๋ค.
๋ด ์ฝ๋
import java.io.*;
import java.util.Stack;
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));
int n = Integer.parseInt(br.readLine());
Stack<Integer> s = new Stack<>(); // Stack
int current = 1; // ํ์ฌ ์คํ์ ๋ฃ์ ์ซ์ (1๋ถํฐ ์์)
StringBuilder result = new StringBuilder();
for (int i = 0; i < n; i++) {
int target = Integer.parseInt(br.readLine());
while (current <= target) { // ํ์ฌ ๊ฐ์ด ์
๋ ฅ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด push
s.push(current);
result.append("+\\n");
current++;
}
// ์คํ์ top์ด target๊ณผ ๊ฐ๋ค๋ฉด pop
if (s.peek() == target) {
s.pop();
result.append("-\\n");
} else { // target์ ๋ง๋ค ์ ์์ผ๋ฉด NO ์ถ๋ ฅ ํ ์ข
๋ฃ
bw.write("NO\\n");
bw.flush();
return;
}
}
// ์ข
๋ฃ
bw.write(result.toString());
bw.flush();
bw.close();
}
}
ํด์ค
Stack์ S, ์์ด์ Tํ์ฌ ๊ฐ์ t๋ผ๊ณ ํ๋ค๋ฉด,
- ์ฐ์ ‘+’, ‘-’๋ฅผ ์ ์ฅํ StringBuilder๋ฅผ ์์ฑํ๋ค. ์ด๋ ๋ฐ๋ณต๋ฌธ์์ ์ถ๋ ฅํด๋ฒ๋ฆฐ๋ค๋ฉด ‘NO’๋ฅผ ์ถ๋ ฅํด์ผ ํ ๋, ‘NO’๋ง ์ถ๋ ฅํ ์ ์๊ธฐ ๋๋ฌธ.
- ๋ํ, ๋ฐ๋ณต๋ฌธ์์ Stack์ ๋ค์ด ๊ฐ ๊ฐ์ ๊ธฐ์ตํ ๋ณ์(current)๋ฅผ ์ ์ธํ๋ค.
- Stack์ 1๋ถํฐ n๊น์ง ์ฑ์์ผ ํ๋ค → ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ
- ๋ฐ๋ณต๋ฌธ ์์์ ์์ด์ ์์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ๊ทธ ๊ฐ๊ณผ ํ์ฌ ๊ฐ์ ๋น๊ตํ๋ค
- ๋น๊ตํ์ฌ ํ์ฌ stack์ ‘๋ค์ด๊ฐ’ ๊ฐ์ด ์๊ฑฐ๋ ๊ฐ๋ค๋ฉด ๊ณ์ pushํด๋ฒ๋ฆฌ๊ณ
- pushํ ๋๋ง๋ค ํ์ฌ ‘๋ค์ด ๊ฐ’ ๊ฐ์ ๋ด๋ ๋ณ์(current)๋ฅผ 1 ์ฆ๊ฐ์์ผ์ค๋ค.
- stack์ ‘๋ค์ด ๊ฐ’ ๊ฐ์ด ์ ๋ ฅ๋ฐ์ ์์๋ณด๋ค ํฌ๋ค๋ฉด push๋ฅผ ๋ฉ์ถ๊ณ
- stack์์ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฐ(Last Input)์ ์ ๋ ฅ๋ฐ์ ์์์ ๋น๊ตํ๋ค
- ๋น๊ต ๊ฒฐ๊ณผ๊ฐ ์ผ์นํ๋ค๋ฉด popํ๋ค.
- ์ฒซ ๋ฒ์งธ pop์ ์ผ์นํ ์๋ฐ์ ์๋ค. 1๋ถํฐ n๊น์ง ์ค์ ์์ด์ ๋ค์ด๊ฐ ์ฒซ ๋ฒ์งธ ์์์ ์ผ์นํ๋ ๊ฐ์ ๋ฌด์กฐ๊ฑด ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ์ง๋ง ์๋์ ๊ฒฝ์ฐ๋ ์ ๋ ์์ด๊ณผ ๋ง์กฑํ๋ OutStack์ ๋ง๋ค ์ ์๋ค.
- Stack{ 1, 2, 3, 4, 5} / ์์ด์ ๋ค์ด๊ฐ ์์ ์ ๋ ฅ๊ฐ: 5 ์ผ๋ ์์ด์ { 5 }๊ฐ ๋๊ณ , ์คํ์์ ์๋์ ๊ฐ์ด popํด์ค๋ค.
- Stack{1, 2, 3, 4} / OutStack{ 5 } = ์์ด{ 5 } ์ธ ์ํฉ์ด๋ผ ๋์ผํด์ง๋ค
- ํ์ง๋ง ๊ทธ ๋ค์ ์์ด์ ๋ค์ด๊ฐ ์์์ ๋ ฅ์ด 3์ด๋ผ๋ฉด?
- Stack{1, 2, 3, 4} / OutStack{ 5 } / ์์ด { 5, 3 } ์ด๋ ๊ฒ ๋์ ๊ฒฝ์ฐ, ์ ๋๋ก popํด์ OutStack์ผ๋ก ๋ด๋๋ค๊ณ ํด๋ { 5, 4, 3 }์ด ๋์ง { 5, 3 }์ด ๋ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก ์ด ๊ฒฝ์ฐ, else์์ ‘NO’๋ฅผ์ถ๋ ฅ์ ํด์ค๋ค.