๐Ÿ“ ๋ฌธ์ œ ์„ค๋ช…

  1. N์žฅ์˜ ์นด๋“œ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.
  2. N์žฅ์˜ ์นด๋“œ: ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ฐจ๋ก€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด์žˆ๋‹ค. 1๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์œ„, N๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์•„๋ž˜์— ์œ„์น˜ํ•œ๋‹ค.
  3. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์นด๋“œ๊ฐ€ ํ•œ ์žฅ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. 1) ์ œ์ผ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ๋ฒ„๋ฆฐ๋‹ค. 2) ๊ทธ ๋‹ค์Œ์œผ๋กœ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ์ตœ ํ•˜๋‹จ ์นด๋“œ์˜ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

๋ฌธ์ œ ๋งํฌ


๐Ÿ’ก ์•„์ด๋””์–ด

  • ArrayDeque๋ฅผ ์‚ฌ์šฉํ•ด์„œ cardSet์„ ๊ตฌํ˜„ํ•œ๋‹ค.
    • Deque ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ์‹œ, ๊ณต์‹ ๋ฌธ์„œ์—์„œ ArrayDeque ์‚ฌ์šฉ์„ ๊ถŒํ•œ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ
  • ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด์„œ .remove ๋ณด๋‹ค๋Š” .pollFirst๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • .remove()๋Š” ๋ฑ์ด ๋น„์–ด ์žˆ์„ ๋•Œ NoSuchElementException์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€๋งŒ, .pollFirst()๋Š” null์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์˜ˆ์™ธ ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ›  ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        Deque<Integer> cardSet = new ArrayDeque<>();

        for (int i = 1; i <= N; i++) {
            cardSet.add(i);
        }

        while (cardSet.size() > 1) {
            cardSet.pollFirst();
            cardSet.addLast(cardSet.pollFirst());
        }

        System.out.println(cardSet.peek());


    }
}

โฑ ์‹œ๊ฐ„๋ณต์žก๋„

  • ์นด๋“œ๋Š” ์ด N์žฅ์ด๊ณ , pollFirst()์™€ addLast() ์—ฐ์‚ฐ์€ ๊ฐ๊ฐ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1)์ธ Deque์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์นด๋“œ๋ฅผ ํ•œ ์žฅ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ ์ด N๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

โœ๏ธ ๋А๋‚€ ์ 

  • ์•ž์œผ๋กœ ๋Œ€๋ถ€๋ถ„์€ ArrayDeque๋กœ ๊ตฌํ˜„ ์‹œ๋„ ํ•ด์•ผ๊ฒ ๋‹ค.
  • ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด .poll .peek ํ•จ์ˆ˜๋ฅผ ์ ๊ทน ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค.