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

[Java] BOJ 10845 ํ

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

๋ฌธ์ œ 

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

  • ์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
    • push X: ์ •์ˆ˜ X๋ฅผ ํ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
    • pop: ํ์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • size: ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
    • empty: ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • front: ํ์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • back: ํ์˜ ๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๋ช…๋ น์€ ์ด ์—ฌ์„ฏ ๊ฐ€์ง€์ด๋‹ค.
  • ์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ N (1 ≤ N ≤ 10,000)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ช…๋ น์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ์ง€ ์•Š์€ ๋ช…๋ น์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.
  • ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๋ช…๋ น์ด ์ฃผ์–ด์งˆ ๋•Œ๋งˆ๋‹ค, ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

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

  • ArrayDeque๋กœ stack๊ณผ queue ๊ธฐ๋Šฅ์„ ํ•œ๊บผ๋ฒˆ์— ์ผ๋‹ค.
  • stack์€ ์„ ์ž…ํ›„์ถœ์ด๊ณ  queue๋Š” ์„ ์ž…์„ ์ถœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์„ ๊บผ๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅธ๋ฐ, front๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ, ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผ๋˜๊ณ  back์ผ๋•Œ, ๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผ๋˜๋ฏ€๋กœ ArrayDeque๋ฅผ ์ผ๋‹ค. 
  • ์ž…๋ ฅ์€ addLast๋กœ queue ์ฒ˜๋Ÿผ ์ž…๋ ฅ์„ ๋ฐ›๊ณ  ๊ฐ’์„ ๋นผ๋‚ผ๋•Œ๋Š” pollFirst๋ฅผ ์จ์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋บ๋‹ค.
  • ์‚ฌ์ด์ฆˆ๋Š” size๋กœ ์ถœ๋ ฅํ•˜๊ณ  ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด peekFirst๋ฅผ ์ผ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด peekLast๋ฅผ ์ผ๋‹ค. 

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

  • ์ฒ˜์Œ์—๋Š” Queue๋กœ ํ’€๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€ ๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์ถœ๋ ฅํ•˜์ง€๋ž€ ๋ฌธ์ œ์ ์ด ์ƒ๊ฒจ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ArrayDeque๋กœ ํ’€๊ฒŒ ๋˜์—ˆ๋‹ค... ์ƒˆ๋กญ๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค..!

์•ž์œผ๋กœ๋„ ํŒŒ์ดํŒ…!

์ฝ”๋“œ

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

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

        int N = Integer.parseInt(br.readLine());

        // queue์™€ stack์„ ๋ชจ๋‘ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ
        ArrayDeque<Integer> q = new ArrayDeque<>();

        for(int test = 0; test < N; test++){
            StringTokenizer st = new StringTokenizer(br.readLine());

            // ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅ๋ฐ›์Œ
            String order = st.nextToken();

            // ๋งŒ์•ฝ ๋ช…๋ น์–ด๊ฐ€ push๋ผ๋ฉด
            if(order.equals("push")){
                int n = Integer.parseInt(st.nextToken());

                // ์ˆ˜๊ฐ€ queue์ฒ˜๋Ÿผ ์ €์žฅ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ addLast๋กœ
                // n์„ queue์— ์ถ”๊ฐ€
                q.addLast(n);
            }
            // ๋งŒ์•ฝ ๋ช…๋ น์–ด๊ฐ€ pop์ด๋ผ๋ฉด
            else if(order.equals("pop")){
                // ๋งŒ์•ฝ queue๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด -1 ์ถœ๋ ฅ
                if(q.isEmpty()){
                    sb.append(-1 + "\n");
                }
                // ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                else{
                    // ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๋‚ด๊ณ  ์ €์žฅํ•˜๊ณ  ์ถœ๋ ฅ
                    int n = q.pollFirst();

                    sb.append(n + "\n");
                }
            }
            // ๋งŒ์•ฝ ๋ช…๋ น์–ด๊ฐ€ size๋ผ๋ฉด
            else if(order.equals("size")){
                // queue์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ €์žฅ ํ›„ ์ถœ๋ ฅ
                int n = q.size();

                sb.append(n + "\n");
            }
            // ๋งŒ์•ฝ ๋ช…๋ น์–ด๊ฐ€ empty๋ผ๋ฉด
            else if(order.equals("empty")){
                // queue๊ฐ€ ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ
                if(q.isEmpty()){
                    // 1์ถœ๋ ฅ
                    sb.append(1 + "\n");
                }
                // ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                else{
                    // 0์ถœ๋ ฅ
                    sb.append(0 + "\n");
                }
            }
            // ๋งŒ์•ฝ ๋ช…๋ น์–ด๊ฐ€ front์ด๊ณ 
            else if(order.equals("front")){
                // queue๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด
                if(q.isEmpty()){
                    sb.append(-1 + "\n");
                }
                // ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                else{
                    // ์ œ์ผ ์•ž์— ์ €์žฅ๋œ ๊ฐ’์„ ์ €์žฅ ํ›„ ์ถœ๋ ฅ
                    int n = q.peekFirst();

                    sb.append(n + "\n");
                }
            }
            // ๋งŒ์•ฝ ๋ช…๋ น์–ด๊ฐ€ back์ด๊ณ 
            else if(order.equals("back")){
                // queue๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด
                if(q.isEmpty()){
                    sb.append(-1 + "\n");
                }
                // ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                else{
                    // ์ œ์ผ ๋‚˜์ค‘์— ์ €์žฅ๋œ ๊ฐ’์„ ์ €์žฅ ํ›„ ์ถœ๋ ฅ
                    int n = q.peekLast();

                    sb.append(n + "\n");
                }
            }
        }
        System.out.println(sb);
    }
}



'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] BOJ 1929 ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ  (0) 2024.07.21
[Java] BOJ 18110 solved.ac  (2) 2024.07.21
[Java] BOJ 10828 ์Šคํƒ  (0) 2024.07.20
[Java] BOJ 10816 ์ˆซ์ž ์นด๋“œ 2  (0) 2024.07.20
[Java] BOJ 10773 ์ œ๋กœ  (0) 2024.07.20