Algorithm๐Ÿฅ‡

1874.์Šคํƒ์ˆ˜์—ด

hae02y 2023. 10. 16. 08:14
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ช…๋ น์€ ์ด ๋‹ค์„ฏ ๊ฐ€์ง€์ด๋‹ค.

  • push X: ์ •์ˆ˜ X๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • pop: ์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • size: ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • empty: ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • top: ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ N (1 โ‰ค N โ‰ค 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ช…๋ น์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ์ง€ ์•Š์€ ๋ช…๋ น์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๋ช…๋ น์ด ์ฃผ์–ด์งˆ ๋•Œ๋งˆ๋‹ค, ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

https://www.acmicpc.net/problem/1874

ํ’€์ด

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ๋ฆ„

  1. ์ž…๋ ฅ ๋ฐ›๊ธฐ
  2. ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ PUSH ํ•˜๊ธฐ
  3. ์›ํ•˜๋Š” ์ˆซ์ž์ผ๋•Œ POPํ•˜๊ธฐ
  4. ๋งŒ์•ฝ ํ•ด๋‹น์ˆซ์ž๊ฐ€ ๋ชป๋‚˜์˜จ๋‹ค๋ฉด NO ์ถœ๋ ฅ
  5. ๋ชจ๋‘ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค๋ฉด sb์— ์ €์žฅ๋œ ๊ฐ’์„ ์ถœ๋ ฅ
  • ์ด๋•Œ ์Šคํƒ์— ์ˆ˜๋ฅผ ๋„ฃ์„๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

๋งŒ์•ฝ์— ์ž…๋ ฅ๊ฐ’์ด 8์ด๋ผ๋ฉด
1 2 3 4 5 6 7 8 ์ด๋ ‡๊ฒŒ PUSH๊ฐ€ ์ผ์–ด๋‚ ๊ฒƒ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊บผ๋‚ด์•ผ๋  ๊ฐ’์ด ๋œ๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ’์„POPํ• ๊ฒƒ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž. ๋งŒ์•ฝ ์ž…๋ ฅ์ด ์•„๋ž˜์™€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

5
4
2
3
1
5

์ฒซ๋ฒˆ์งธ์˜ 5๋Š” ๊ฐฏ์ˆ˜N์ด๋ฏ€๋กœ ๊ทธ๋’ค์— 5๊ฐœ๊ฐ€ ๋‚˜์˜ฌ๊ฒƒ์„ ์•Œ๋ ค์ค€๋‹ค. ์ƒ๋žตํ•˜๊ณ  ๋‹ค์Œ ์ˆซ์ž๋ฅผ ๋ณด์ž

4 ! ์ž ๊ทธ๋Ÿผ 4๋ฅผ ๊บผ๋‚ผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ผ๋‹จ 4๊ฐœ๋ฅผ PUSHํ•ด์•ผํ• ๊ฒƒ์ด๋‹ค.

์ฆ‰ ์Šคํƒ์„ ๋ณธ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

STACK - 1
STACK - 1 2
STACK - 1 2 3
STACK - 1 2 3 4

4๊ฐ€ ๋‚˜์™”๋‹ค. ๊ทธ๋Ÿผ ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” 4๋ฅผ ์ฐพ์•˜์œผ๋ฏ€๋กœ 4๋ฅผ POPํ•œ๋‹ค. ๊ทธ๋Ÿผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋œ๋‹ค.
STACK - 1 2 3
๋‹ค์Œ์œผ๋กœ ์ฐพ์„ ์ˆซ์ž๋Š” 2์ด๋‹ค. 2๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ๋ณด๋‹ˆ 3์ด TOP์— ์žˆ๋‹ค. ๊ทธ๋Ÿผ POP ์—ฐ์‚ฐ์œผ๋กœ ์—†์• ์ค€๋‹ค.
STACK - 1 2
๊ทธ๋Ÿผ 2๊ฐ€ ๋‚˜์™”๋‹ค. ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์•˜์œผ๋‹ˆ 2๋ฅผ POP ํ•ด์ค€๋‹ค.
STACK - 1
๋‹ค์Œ์œผ๋กœ ์ฐพ์„์ˆซ์ž๋Š” 3์ด๋‹ค. 3์„ ์ฐพ์•„์•ผํ•˜๋Š”๋ฐ ์šฐ๋ฆฌ๊ฐ€ 4๊นŒ์ง€ PUSH๋ฅผ ํ–ˆ์œผ๋ฏ€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ PUSH๋˜๋ ค๋ฉด ๋‹ค์Œ์œผ๋กœ PUSH๋˜๋Š” ๊ฐ’์€ 5์ด๋‹ค.
STACK - 1 5
์•„๋ฌด๋ฆฌ ์—ฌ๊ธฐ์„œ 5 6 7 8 ์ถ”๊ฐ€๊ฐ€ ๋˜์–ด๋„ ์ฐพ์œผ๋ ค๋Š” 3์€ ์ฐพ์„์ˆ˜์—†์„๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜์—ˆ์„๋•Œ ์ถœ๋ ฅ์€ "NO"๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

์ฝ”๋“œ

import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        Stack<Integer> stack = new Stack<>();

        int n = sc.nextInt();

        int start = 0;

        for(int i=0; i<n; i++){

            int value = sc.nextInt();

            if(value > start){

                for(int j=start+1; j<=value; j++){
                    stack.push(j);
                    sb.append('+').append('\n');
                }
                start = value;
            } else if (stack.peek() != value) {
                System.out.println("NO");
                return;
            }

            stack.pop();
            sb.append('-').append('\n');
        }

        sc.close();

        System.out.println(sb);
    }
}
๋ฐ˜์‘ํ˜•