Home [BaekJoon] 1874 ์Šคํƒ ์ˆ˜์—ด JAVA
Post
Cancel

[BaekJoon] 1874 ์Šคํƒ ์ˆ˜์—ด JAVA

๐Ÿ”— ๋ฐฑ์ค€ 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);
    }
}
This post is licensed under CC BY 4.0 by the author.

[BaekJoon] 1654 ๋žœ์„  ์ž๋ฅด๊ธฐ JAVA

[BaekJoon] 1436 ์˜ํ™”๊ฐ๋… ์ˆŒ JAVA