반응형

문제 출처 :


https://www.acmicpc.net/problem/1914



알고리즘 분석 :


문제 해결에 필요한 사항

1. 하노이 탑


하노이 탑 방식은 막대 A에 꽂혀있는 원반 n개를 막대 C로 옮기는 과정은 다음과 같이 재귀적으로 구성할 수 있다.


1. 작은 원반 n-1개를(맨 아래의 원반을 제외한 나머지 원반) A에서 B로 이동

2. 큰 원반(맨 아래의 원반) 1개를 A에서 C로 이동

3. 작은 원반(위의 1단계에서 옮겨진 원반) n-1개를 B에서 C로 이동시키면 된다.


이것을 코드로 표현하면 아래 hanoi 코드와 같게 된다.


one :: from(에서 시작하여)

two :: by(를 거쳐서)

three :: to(로)로 생각하면 생각하기 조금 더 쉬울 것 같다.


그리고 하노이 타워의 이동 수를 구하는 방법은


공식을 이용하자.


하노이 탑에서 원판이 N개일때 총 횟수 :: 






소스 코드 : 


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
30
31
32
33
34
35
36
37
38
import java.math.BigInteger;
import java.util.Scanner;
 
public class Main {
    
    static void hanoi(int num, char one, char two, char three)
    {
        if(num == 1)
            System.out.println(one + " " + three);
        
        else
        {
            hanoi(num - 1, one, three, two);
            System.out.println(one + " " + three);
            hanoi(num - 1, two, one, three);
        }
        
    }  
    
    public static void main(String[] args)
    {
        BigInteger c = new BigInteger("2");
        Scanner sc = new Scanner(System.in);
               
        int n = sc.nextInt();
        
        c = c.pow(n).subtract(BigInteger.ONE);
        
        System.out.println(c);
        
        if(n <= 20)
            hanoi(n,'1','2','3');
    }
    
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[12791번] Starman  (0) 2017.04.21
[13410번] 거꾸로 구구단  (0) 2017.04.21
[6588번] 골드바흐의 추측  (2) 2017.04.21
[10827번] a^b  (0) 2017.04.21
[2589번] 보물섬  (0) 2017.04.21