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

[Java] BOJ 2164 ์นด๋“œ2

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

๋ฌธ์ œ 

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

  • N์žฅ์˜ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ฐจ๋ก€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ์œผ๋ฉฐ, 1๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์œ„์—, N๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์•„๋ž˜์ธ ์ƒํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์นด๋“œ๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค.
  • ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์นด๋“œ๊ฐ€ ํ•œ ์žฅ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ์„ , ์ œ์ผ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ๋ฐ”๋‹ฅ์— ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ ๋‹ค์Œ, ์ œ์ผ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ์ œ์ผ ์•„๋ž˜์— ์žˆ๋Š” ์นด๋“œ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด N=4์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž. ์นด๋“œ๋Š” ์ œ์ผ ์œ„์—์„œ๋ถ€ํ„ฐ 1234 ์˜ ์ˆœ์„œ๋กœ ๋†“์—ฌ์žˆ๋‹ค. 1์„ ๋ฒ„๋ฆฌ๋ฉด 234๊ฐ€ ๋‚จ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ 2๋ฅผ ์ œ์ผ ์•„๋ž˜๋กœ ์˜ฎ๊ธฐ๋ฉด 342๊ฐ€ ๋œ๋‹ค. 3์„ ๋ฒ„๋ฆฌ๋ฉด 42๊ฐ€ ๋˜๊ณ , 4๋ฅผ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด 24๊ฐ€ ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ 2๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๋‚˜๋ฉด, ๋‚จ๋Š” ์นด๋“œ๋Š” 4๊ฐ€ ๋œ๋‹ค.
  • N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋‚จ๊ฒŒ ๋˜๋Š” ์นด๋“œ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— ์ •์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ์ฒซ์งธ ์ค„์— ๋‚จ๊ฒŒ ๋˜๋Š” ์นด๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

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

  • ํ์— ๋„ฃ์–ด์„œ ๊ฐ’์„ ๋นผ๊ณ  ๋‹ค์‹œ ๋„ฃ๊ณ  ๋ฐ˜๋ณตํ•ด์„œ ํ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 1์ด ๋ ๋•Œ While๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋‚จ์€ ๊ฐ’์„ ์ถœ๋ ฅํ–ˆ๋‹ค. 

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

  • ์ฒ˜์Œ์—๋Š” ํ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•˜๊ณ  While๋ฌธ์— ์กฐ๊ฑด์— ์กฐ๊ฑด์„ ๋‹ฌ์•„์„œ ๊ตฌํ˜„์œผ๋กœ ํ’€์–ด๋ณด๋ คํ–ˆ์ง€๋งŒ.... ์ƒ๊ฐ๋Œ€๋กœ ๋˜์ง€ ์•Š์•„ ๊ฒฐ๊ตญ ํ๋กœ ํ’€๊ฒŒ ๋˜์—ˆ๋‹ค... ใ…œใ…œ

ํ๋ฅผ ์ข€ ๋” ๋นจ๋ฆฌ ์ƒ๊ฐํ•ด๋ƒˆ๋”๋ผ๋ฉด.....

์ฝ”๋“œ

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

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

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

        // ํ ์‚ฌ์šฉ
        Queue<Integer> q = new LinkedList<>();

        // ํ ๊ฐ’์— ์ˆœ์„œ๋Œ€๋กœ ์ˆซ์ž๋ฅผ ๋„ฃ์Œ
        for(int i = 1; i <= N; i++){
            q.offer(i);
        }

        // ํ์— ๋‚จ์€ ์ˆซ์ž๊ฐ€ ํ•œ๊ฐœ๊ฐ€ ๋˜๋ฉด While๋ฌธ ์ข…๋ฃŒ
        while(true){
            if(q.size() == 1){
                break;
            }

            // ์ฒ˜์Œ ์ˆซ์ž ๊บผ๋‚ด๊ธฐ
            q.poll();
            // ๋‹ค์Œ ์ˆซ์ž๋ฅผ ๊บผ๋‚ด์„œ ์ €์žฅ ํ›„
            int n = q.poll();

            // ๋‹ค์‹œ ๋’ค์— ์ €์žฅ
            q.offer(n);
        }

        System.out.println(q.poll());
    }
}