๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 10773 ์ œ๋กœ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 20.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/10773

  • ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ •์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ 100,000)์ •์ˆ˜๊ฐ€ "0"์ผ ๊ฒฝ์šฐ์— ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์žˆ์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ดํ›„ K๊ฐœ์˜ ์ค„์— ์ •์ˆ˜๊ฐ€ 1๊ฐœ์”ฉ ์ฃผ์–ด์ง„๋‹ค.
  • ์ •์ˆ˜๋Š” 0์—์„œ 1,000,000 ์‚ฌ์ด์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ์ •์ˆ˜๊ฐ€ "0" ์ผ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ์“ด ์ˆ˜๋ฅผ ์ง€์šฐ๊ณ , ์•„๋‹ ๊ฒฝ์šฐ ํ•ด๋‹น ์ˆ˜๋ฅผ ์“ด๋‹ค.
  • ์žฌ๋ฏผ์ด๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์ ์–ด ๋‚ธ ์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ตœ์ข…์ ์œผ๋กœ ์ ์–ด๋‚ธ ์ˆ˜์˜ ํ•ฉ์€ 231-1๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜์ด๋‹ค.

์•„์ด๋””์–ด

  • ์ˆซ์ž๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ๋งˆ๋‹ค stack์— ๋‹ด๊ณ  ๋งŒ์•ฝ ์ˆซ์ž๊ฐ€ 0์ผ ๊ฒฝ์šฐ, stack์˜ ๋งจ ์œ„์— ์žˆ๋Š” ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
  • ๋ชจ๋“  ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ๋‚œ ํ›„, While๋ฌธ์„ ํ†ตํ•ด stack์ด ๋นŒ ๋•Œ๊นŒ์ง€ stack์— ์žˆ๋Š” ์ˆซ์ž๋“ค์„ ๋”ํ•ด์ค€๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • X

์˜ค๋Š˜์€ ๋ชจ๋‘ stack ๋ฌธ์ œ๋ผ ์ฒซ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‚จ์€ ๋ฌธ์ œ๋Š” ์ˆ˜์›”ํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค ใ…Žใ…Ž

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ10773 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ์ˆ˜
        int N = Integer.parseInt(br.readLine());

        // ์ˆ˜๋ฅผ ์ €์žฅํ•  stack
        Stack<Integer> num = new Stack<>();

        int result = 0;

        for(int i = 0; i < N; i++){
            // ํ•œ ์ค„์— ์ˆซ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ž…๋ ฅ๋ฐ›์Œ
            int n = Integer.parseInt(br.readLine());

            // ๋งŒ์•ฝ ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž๊ฐ€ 0์ผ ๊ฒฝ์šฐ
            if(n == 0){
                // ๋งจ ์œ„์— ์žˆ๋Š” ์ˆซ์ž pop
                // ์ •์ˆ˜๊ฐ€ 0์ผ ๊ฒฝ์šฐ, ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์žˆ์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ
                num.pop();
            }
            // ์•„๋‹ ๊ฒฝ์šฐ, stack์— ์ˆซ์ž๋ฅผ ๋„ฃ์Œ
            else{
                num.add(n);
            }
        }

        // stack์ด ๋น„๊ธฐ ์ „๊นŒ์ง€ stack์— ์žˆ๋Š” ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•จ
        while(!num.empty()){
            result = result + num.pop();
        }

        System.out.println(result);
    }
}