| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 삼성SW테스트
- 다이나믹 프로그래밍
- dp
- 개발
- 익명객체
- 현대오토에버 코딩테스트
- 자바
- 프로그래머스
- 안드로이드
- 너비탐색
- 알고리즘
- 삼성sw문제
- 네트워크
- Android
- 재귀함수
- 백준
- 모바일
- 금융IT
- 데이터베이스
- 조합
- backjoon
- dfs
- 익명클래스
- 언더라이터
- CKLU
- BFS
- Java
- 멀티스레드
- 백준 알고리즘
- IT
- Today
- Total
Limky 삽질블로그
[Recursion] 하노이(Hanoi) 본문
BackJoon
#1914 - 하노이(Hanoi)
https://www.acmicpc.net/problem/1914
하노이 솔루션
우선 n개를 쌓을 경우 n번째를 제외한 n-1를 하나로 간주하고 3가지 스텝을 거치면 풀린다....
<<1기둥에 있는 n-1개를 2기둥을 이용하여 3기둥으로 옮기는 알고리즘 이라고 크게 가정>>
1. 1기둥에 있는 n-1개를 3기둥을 이용하여 2기둥으로 옮긴다!
2. 1기둥에 있는 1개를 3기둥으로 옮겨라
3. 2기둥에 있는 n-1개를 1기둥을 이용하여 3기둥으로 옮겨라!
** 문제는 출력초과 **
- 이 부분은 좀 더 연구가 필요하다....아시는 분은 저에게 가르침을...
package BackJoon.Recursion; import java.util.Scanner; public class Hanoi { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //0. 1기둥에 있는 n-1개를 2기둥을 이용하여 3기둥으로 옮기는 알고리즘 //1. 1기둥에 있는 n-1개를 3기둥을 이용하여 2기둥로 옯겨라 //2. 1기둥에 있는 1개의를 3기둥으로 옮겨라 //3. 2기둥에 있는 n-1개를 1기둥을 이용하여 3기둥으로 옮겨라 //2의 n승 - 1 <- 최소 횟수 System.out.println((int)Math.pow(2, n) - 1); //01. 재귀호출 hanoi(n,1,2,3); } private static void hanoi(int n, int from, int by, int to) { if(n == 1){ System.out.println(from+" "+to); }else{ hanoi(n-1, from, to, by); System.out.println(from+" "+to); hanoi(n-1, by, from, to); } } }
'Algorithm > BackJoon' 카테고리의 다른 글
| [삼성SW테스트] 치킨배달 15686(백준) (0) | 2018.06.16 |
|---|---|
| [BFS] 토마토(Tomato) (0) | 2018.04.15 |
| [DFS] 경로찾기(Find Directions) (0) | 2017.11.22 |
| [삼성SDS] 백준 - 경사로(Runway) (0) | 2017.11.08 |
| [삼성전자] 백준 - 톱니바퀴(Gear) (0) | 2017.11.07 |