[์žฌ๊ท€ํ˜ธ์ถœ] ํ•˜๋…ธ์ดํƒ‘

๊ทœ์น™


"๋งŒ์•ฝ A,B,C ์ค‘์—์„œ A์—์„œ C๋กœ ์›๋ฐ˜์ด ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๊ฐ€์žฅ ํฐ ์›๋ฐ˜์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์›๋ฐ˜๋“ค์„ ์šฐ์„  B๋กœ ์ด๋™ํ•ด์•ผํ•จ"

 

์–ด๋– ํ•œ ๊ฒฝ์šฐ๋ผ๋„, ๊ฐ€์žฅ ํฐ ์›๋ฐ˜์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์›๋ฐ˜๋“ค์€ ๋ชฉ์ ์ง€์™€ ์ถœ๋ฐœ์ง€๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ถ•์— ์Œ“์•„์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ์›๋ฐ˜์„ ๋ชฉ์ ์ง€์— ๊ฐ€์ ธ๋‹ค ๋†“์€ ํ›„, ๋‚˜๋จธ์ง€ ์›๋ฐ˜๋“ค์„ ๋‹ค์‹œ ๋ชฉ์ ์ง€๋กœ ์ด๋™์‹œ์ผœ์•ผ ํ•œ๋‹ค.

๋ชฉ์ ์ง€๋กœ ์ด๋™ํ•  ๋•Œ ๋˜ํ•œ, ์œ„์˜ ๊ณต์‹์ด ์ด๋ค„์ ธ์•ผ ํ•œ๋‹ค.

 

 

"๋งŒ์•ฝ ์ถœ๋ฐœ ์ถ•์„ 1, ๋ชฉ์ ์ง€ ์ถ•์„ 3์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ์ถ• 2๋ฅผ ๊ตฌํ•˜๋Š” ๊ณต์‹์€ (1+2+3) - (3+1) ์ด๋‹ค. "

 

์ฆ‰, ๋ชจ๋“  ์›๋ฐ˜์—์„œ ์ถœ๋ฐœ ์ถ•๊ณผ ๋ชฉ์ ์ง€ ์ถ•์„ ๋นผ๋ฉด ๋‚˜๋จธ์ง€ ์ถ•์ด ๋‚˜์˜จ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 

ํ’€์ด


์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค๋ฉด, ์„ธ ๊ฐ€์ง€ ํ๋ฆ„์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.

(1) ์ด ์›๋ฐ˜์˜ ์ˆ˜๊ฐ€ n์ด๋ผ ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ํฐ ์›๋ฐ˜์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ n-1๊ฐœ์˜ ์›๋ฐ˜์„ ์ถœ๋ฐœ,๋ชฉ์ ์ง€ ์ถ•์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ถ•์— ๋ชจ๋‘ ์Œ“์•„์•ผ ํ•œ๋‹ค.

(2) ๊ฐ€์žฅ ํฐ ์›๋ฐ˜์„ ๋ชฉ์ ์ง€ ์ถ•์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

(3) ๋‚˜๋จธ์ง€ ์ถ•์— ์Œ“์—ฌ์ ธ ์žˆ๋Š” n-1๊ฐœ์˜ ์›๋ฐ˜๋“ค์„ ๋ชฉ์ ์ง€ ์ถ•์œผ๋กœ ๋ชจ๋‘ ์ด๋™์‹œํ‚จ๋‹ค. 

 

"1,3๋ฒˆ ๊ณผ์ •์—์„œ ๋‹น์—ฐํžˆ ์„ธ ๊ฐ€์ง€ ํ๋ฆ„์„ ๊ผญ ์ง€์ผœ์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค." 

 

์ฝ”๋“œ


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.Scanner;
 
public class hanoiTower {
    public static void hanoi(BufferedWriter bw,int a, int b,int count) throws IOException {
        if(count == 1) {
            bw.write(a + " " + b + "\n");
            return;
        }    
        
        int goal = 6 - (a+b);
        hanoi(bw,a,goal,count-1); 
        bw.write(a + " " + b+ "\n");
        hanoi(bw,goal,b,count-1);    
        return;
    }
    
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        bw.write((1<<count)-1+ "\n");
        hanoi(bw,1,3,count);
        bw.close();
    }
}