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

[Java] BOJ 1966 ํ”„๋ฆฐํ„ฐ ํ

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

๋ฌธ์ œ 

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

  • ์ƒˆ๋กœ์šด ํ”„๋ฆฐํ„ฐ๊ธฐ ๋‚ด๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€๋Š”๋ฐ, ์ด ํ”„๋ฆฐํ„ฐ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ์‡„๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.
    1. ํ˜„์žฌ Queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ‘์ค‘์š”๋„’๋ฅผ ํ™•์ธํ•œ๋‹ค.
    2. ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋“ค ์ค‘ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•˜์ง€ ์•Š๊ณ  Queue์˜ ๊ฐ€์žฅ ๋’ค์— ์žฌ๋ฐฐ์น˜ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ์ธ์‡„๋ฅผ ํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด Queue์— 4๊ฐœ์˜ ๋ฌธ์„œ(A B C D)๊ฐ€ ์žˆ๊ณ , ์ค‘์š”๋„๊ฐ€ 2 1 4 3 ๋ผ๋ฉด C๋ฅผ ์ธ์‡„ํ•˜๊ณ , ๋‹ค์Œ์œผ๋กœ D๋ฅผ ์ธ์‡„ํ•˜๊ณ  A, B๋ฅผ ์ธ์‡„ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€, ํ˜„์žฌ Queue์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ˆ˜์™€ ์ค‘์š”๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์–ด๋–ค ํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์˜ˆ์—์„œ C๋ฌธ์„œ๋Š” 1๋ฒˆ์งธ๋กœ, A๋ฌธ์„œ๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๊ฒŒ ๋œ๋‹ค.
  • ์ฒซ ์ค„์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋‘ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ, ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๊ฐ€ ํ˜„์žฌ Queue์—์„œ ๋ช‡ ๋ฒˆ์งธ์— ๋†“์—ฌ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ M(0 ≤ M < N)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ์ด๋•Œ ๋งจ ์™ผ์ชฝ์€ 0๋ฒˆ์งธ๋ผ๊ณ  ํ•˜์ž. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ฐœ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ค‘์š”๋„๋Š” 1 ์ด์ƒ 9 ์ดํ•˜์˜ ์ •์ˆ˜์ด๊ณ , ์ค‘์š”๋„๊ฐ€ ๊ฐ™์€ ๋ฌธ์„œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

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

  • LinkedList์— ๋“ค์–ด์˜ค๋Š” ์ˆœ๋ฒˆ๊ณผ ๋“ค์–ด์˜จ ์šฐ์„ ์ˆœ์œ„ ์ˆซ์ž๋ฅผ int ๋ฐฐ์—ด๋กœ ์ €์žฅํ–ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  While๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ์ œ์ผ ์œ„์— ์žˆ๋Š” ๋ฐฐ์—ด์„ ๊บผ๋‚ด์„œ ํ•ด๋‹น ๋ฐฐ์—ด์— ์ €์žฅ๋œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ „์ฒด ๋ฐฐ์—ด์—์„œ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๋Š”๋‹ค. 
  • ๋งŒ์•ฝ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋‹ค๋ฉด ๋งจ ์œ„์— ์žˆ๋Š” ๊ฒƒ์„ ๋นผ๋‚ด์„œ ๋‹ค์‹œ LinkedList์— ๋„ฃ๊ณ  ํ•ด๋‹น ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋˜ ์•ž์— ๋ฐฐ์—ด๋“ค๋„ ๋ชจ๋‘ ๋นผ์„œ ๋‹ค์‹œ ๋„ฃ๋Š”๋‹ค. 
  • ๊ทธ๋ฆฌ๊ณ  ๋” ๋†’์€๊ฒŒ ์žˆ๋Š”์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ true๋กœ ๋ฐ”๊พธ๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๋งŒ์•ฝ ๋” ๋†’์€๊ฒŒ ์—†๋‹ค๋ฉด, ํ•ด๋‹น ๋งจ ์œ„์˜ ๋ฐฐ์—ด์„ ๋นผ๋‚ด๊ณ  ์ถœ๋ ฅ ํšŸ์ˆ˜์— 1์„ ๋”ํ•ด์ค€๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ๋งจ ์œ„์˜ ๋ฐฐ์—ด ์ˆœ๋ฒˆ์ด ์ถœ๋ ฅ์ˆœ์„œ๋ฅผ ์•Œ์•„์•ผ๋˜๋Š” ๋ฌธ์„œ ์ˆœ๋ฒˆ๊ณผ ๊ฐ™๋‹ค๋ฉด ํ•ด๋‹น ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅ ํ›„ While๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค. 

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

  • ์ฒ˜์Œ์—๋Š” ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ–ˆ์—ˆ๋‹ค... stack์— hashmap, deque ๋“ฑ๋“ฑ ์ตœ๋Œ€ํ•œ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ  ์ตœ๋Œ“๊ฐ’์„ ๋ฐ”๋กœ๋ฐ”๋กœ ์ฐพ์•„์„œ ์‹œ๊ฐ„์ดˆ๋ฅผ ์ค„์ด๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์‹ถ์€ ์ƒ๊ฐ์— ์ฝ”๋“œ๊ฐ€ ๋”๋Ÿฌ์›Œ์กŒ๋˜ ๊ฒƒ ๊ฐ™๋‹ค ใ…œใ…œ (์‹œ๊ฐ„๋„ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค....)
  • for๋ฌธ์„ ๋Œ๋ ค๋„ ์‹œ๊ฐ„์ด ๊ทธ๋ ‡๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์œผ๋‹ˆ (๋ฌผ๋ก  ๊ณผํ•˜๋ฉด ์•ˆ๋œ๋‹ค..!) ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์šฐ์„ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์‹œ๊ฐ„์ดˆ๋ฅผ ์ค„์—ฌ๋ณด์ž...!

ํž˜๋“  ์‹ธ์›€์ด์˜€๋‹ค... ํ›„...

์ฝ”๋“œ

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

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

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

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

            // ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜
            int N = Integer.parseInt(st.nextToken());
            // ๋ช‡๋ฒˆ์งธ ๋ฌธ์„œ์˜ ์ถœ๋ ฅ ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์‹ถ์€์ง€
            int M = Integer.parseInt(st.nextToken());

            // ๋ช‡๋ฒˆ์งธ์ธ์ง€, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์–ผ๋งˆ์ธ์ง€ ์ €์žฅํ•  ๋ฐฐ์—ด
            LinkedList<int[]> q = new LinkedList<>();

            StringTokenizer st2 = new StringTokenizer(br.readLine());

            // ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์„œ ๋ฐฐ์—ด๊ณผ stack์— ๋„ฃ์Œ
            for(int i = 0; i < N; i++){
                int n = Integer.parseInt(st2.nextToken());

                // M๋ฒˆ์งธ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ๋ญ”์ง€ ์ €์žฅ
                q.add(new int[]{i, n});
            }

            // ์ถœ๋ ฅ์ด ๋ช‡๋ฒˆ์งธ์ธ์ง€ ์ €์žฅํ•  ๋ณ€์ˆ˜
            int cnt = 0;

            while(true){
                // ๋งจ ์œ„์— ์ˆซ์ž๊ฐ€ ์ถœ๋ ฅ ์ˆซ์ž ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ
                int top[] = q.poll();

                // ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ•  ๋ณ€์ˆ˜
                boolean isHigher = false;

                // q์˜ ํฌ๊ธฐ๋งŒํผ ๋ฐ˜๋ณต
                for(int i = 0; i < q.size(); i++){
                    // ๋งŒ์•ฝ ๋งจ ์œ„์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์šฐ์„ ์ˆœ์œ„๋ณด๋‹ค
                    // ๋‹ค๋ฅธ ๋ฌธ์„œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’๋‹ค๋ฉด
                    if(q.get(i)[1] > top[1]){
                        // ๋งจ ์œ„์— ๋นผ๋‚ธ ๊ฐ’์„ ๋‹ค์‹œ ํ์— ๋„ฃ์Œ
                        q.add(top);

                        // ๋งจ ์œ„์— ์žˆ๋˜ ๊ฒƒ์„ ๋‹ค์‹œ ํ์— ๋„ฃ๊ณ 
                        // i๋ฒˆ์งธ๊ฐ€ ๋งจ ์œ„์— ์žˆ๋˜ ๊ฒƒ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์œผ๋ฏ€๋กœ
                        // i๋ฒˆ์งธ๊นŒ์ง€ ๋ชจ๋‘ ๊บผ๋‚ด์„œ ๋‹ค์‹œ ๋’ค๋กœ ๋„ฃ์Œ
                        for(int j = 0; j < i; j++){
                            q.add(q.poll());
                        }

                        // ๋” ๋†’์€ ๊ฒƒ์ด ์žˆ์œผ๋ฏ€๋กœ true๋กœ ๋ณ€ํ™˜ ํ›„, ์ข…๋ฃŒ
                        isHigher = true;
                        break;
                    }
                }

                // ๋งŒ์•ฝ ๋” ๋†’์€ ๊ฐ’์ด ์—†๋‹ค๋ฉด
                if(!isHigher){
                    // ์ถœ๋ ฅ + 1
                    cnt = cnt + 1;

                    // ๋งŒ์•ฝ ๋งจ์œ„์— ์žˆ๋˜ ๋ฌธ์„œ์˜ ๋ฒˆํ˜ธ์™€ ์ถœ๋ ฅ์ˆœ์„œ๋ฅผ ์•Œ์•„์•ผํ•˜๋Š”
                    // ๋ฌธ์„œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™๋‹ค๋ฉด
                    if(top[0] == M){
                        // ์ถœ๋ ฅ ์ˆœ์„œ ์ถœ๋ ฅ ํ›„, ์ข…๋ฃŒ
                        sb.append(cnt + "\n");
                        break;
                    }
                }
            }
        }

        System.out.println(sb);
    }
}



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

[Java] BOJ 1654 ๋žœ์„  ์ž๋ฅด๊ธฐ  (10) 2024.07.22
[Java] BOJ 2108 ํ†ต๊ณ„ํ•™  (2) 2024.07.22
[Java] BOJ 1929 ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ  (0) 2024.07.21
[Java] BOJ 18110 solved.ac  (2) 2024.07.21
[Java] BOJ 10845 ํ  (4) 2024.07.20