๊ธฐ๋ก๋ฐฉ

BOJ_1914 : ํ•˜๋…ธ์ด ํƒ‘ ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

BOJ_1914 : ํ•˜๋…ธ์ด ํƒ‘

Soom_1n 2023. 4. 7. 16:01

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

1914๋ฒˆ: ํ•˜๋…ธ์ด ํƒ‘

์„ธ ๊ฐœ์˜ ์žฅ๋Œ€๊ฐ€ ์žˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—๋Š” ๋ฐ˜๊ฒฝ์ด ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›ํŒ์ด ์Œ“์—ฌ ์žˆ๋‹ค. ๊ฐ ์›ํŒ์€ ๋ฐ˜๊ฒฝ์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์Œ“์—ฌ์žˆ๋‹ค. ์ด์ œ ์ˆ˜๋„์Šน๋“ค์ด ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—์„œ ์„ธ ๋ฒˆ์งธ ์žฅ๋Œ€๋กœ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • 3๊ฐœ ์žฅ๋Œ€์™€ N๊ฐœ์˜ ์›ํŒ์ด ์žˆ๋Š” ํ•˜๋…ธ์ดํƒ‘ ๋ฌธ์ œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์›ํŒ์„ ์˜ฎ๊ธด ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์›ํŒ์„ ์˜ฎ๊ธธ ๋•Œ๋ฅผ ์žฌ๊ท€๋กœ ๋‚˜๋ˆ  ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์›ํŒ์˜ ๋†’์ด๊ฐ€ 1์ผ๋•Œ์™€ ๊ทธ๋ณด๋‹ค ํด ๋•Œ๋กœ ๋‚˜๋ˆ  ์ƒ๊ฐํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด 2๊ฐœ์˜ ์›ํŒ์„ ์˜ฎ๊ธธ ๋•Œ,
      • ์ฒซ ์›ํŒ์€ ์ž„์‹œ ์ง€์ ์— ๋†“๋Š”๋‹ค.
      • ๋‘ ๋ฒˆ์งธ ์›ํŒ์€ ๋ชฉ์ ์ง€์— ๋†“๋Š”๋‹ค.
      • ์ฒซ ์›ํŒ์„ ๋ชฉ์ ์ง€์˜ ๋‘ ๋ฒˆ์งธ ์›ํŒ ์œ„์— ๋†“๋Š”๋‹ค.
    • ๋”ฐ๋ผ์„œ ์„ธ ๋ง‰๋Œ€๋ฅผ ์‹œ์ž‘, ์ž„์‹œ, ๋ชฉ์  ์„ธ ์ง€์ ์œผ๋กœ ๋‚˜๋ˆ  ์žฌ๊ท€์ ์œผ๋กœ ์ƒ๊ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • N์ด ๋„ˆ๋ฌด ์ปค์ง€๋ฉด ์žฌ๊ท€๊ฐ’์ด ๋„ˆ๋ฌด ์ปค์ง€๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋Š” 20๋ณด๋‹ค ํฌ๋ฉด ๊ณผ์ • ์ถœ๋ ฅ์€ ์ƒ๋žตํ•œ๋‹ค.
    • ํ•˜๋…ธ์ด ํƒ‘์˜ ์ด๋™ ํšŸ์ˆ˜๋Š” 2^N-1์ธ๋ฐ,  N์ด 100๊นŒ์ง€ ๊ฐ€๋ฏ€๋กœ ์ด๋™ ํšŸ์ˆ˜๊ฐ€ int๋‚˜ longํ˜•์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋œ๋‹ค.
    • ๋”ฐ๋ผ์„œ ํฐ ์ˆ˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

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

        // Recursion
        BigInteger bigInteger1 = new BigInteger("1");
        BigInteger bigInteger2 = new BigInteger("2");
        for (int i = 0; i < N; i++) {
            bigInteger1 = bigInteger1.multiply(bigInteger2);
        }
        System.out.println(bigInteger1.subtract(new BigInteger("1")));
        if (N <= 20) {
            sb = new StringBuilder();
            hanoi(N, 1, 2, 3);
            System.out.print(sb);
        }
    }

    private static void hanoi(int n, int s, int t, int e){
        if (n == 1) {
            sb.append(s).append(' ').append(e).append('\n');
            return;
        }

        hanoi(n-1, s, e, t);
        hanoi(1, s, t, e);
        hanoi(n-1, t, s, e);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ํฐ ์ˆ˜ ์—ฐ์‚ฐ์„ ์œ„ํ•ด BigInteger๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • 2^N - 1 ์„ ๊ณ„์‚ฐํ•ด ์ถœ๋ ฅํ•œ๋‹ค.
  • N์ด 20๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ, ์žฌ๊ท€๋กœ ๊ณผ์ •์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • n์ด 1์ด ๋œ ๊ฒฝ์šฐ๋Š” ์‹œ์ž‘์ง€ s ์—์„œ ๋„์ฐฉ์ง€ e๋กœ ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.
    • n์ด 1๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์œผ๋กœ ์žฌ๊ท€ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
      1. ๋ฐ‘ ๋ฐ”๋‹ฅ ์›ํŒ์˜ ์œ„์ชฝ์„ ์ž„์‹œ ์ง€์ ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
      2. ๋ฐ‘ ๋ฐ”๋‹ฅ ์›ํŒ์„ ๋ชฉ์ ์ง€๋กœ ์˜ฎ๊ธด๋‹ค.
      3. ์ž„์‹œ ์ง€์ ์˜ ์›ํŒ์„ ๋‹ค์‹œ ๋ชฉ์ ์ง€์˜ ๋ฐ‘ ๋ฐ”๋‹ฅ ์›ํŒ ์œ„๋กœ ์˜ฎ๊ธด๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ด์ „์— ๋‹ต์„ ๋ณด๊ณ  ํ’€์—ˆ์–ด์„œ ๋‹ค์‹œ ํ’€์–ด๋ณด์•˜๋‹ค.
    • ์žฌ๊ท€ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„์— ์ข‹์€ ์—ฐ์Šต์ด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

728x90