Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 퍼스트 뷰
- 도메인
- pop
- ADSL
- 인공지능
- 레거시 마이그레이션
- 제어문
- 각자의 밤
- javascript
- 직귀율
- Done is better than perfect
- 내장객체
- 반응형 디자인
- bom
- 릴리스
- 중요한건 꺾이지 않는 마음
- release
- 怕不变
- first view
- Great things take time
- 기술면접 후기
- 자바스크립트 함수
- Array
- Electronic Commerece
- javascript function
- 배열
- 자바스크립트
- 不不怕变
- 객체
- 사이트 이동 경로
Archives
- Today
- Total
1일1끄적
자료구조&기본 알고리즘 입문(자바)- 하노이의 탑 본문
● 하노이의 탑
하노이의 탑(Towers of Hanoir)은 작은 원반이 위에, 큰 원반이 아래에 취치할 수 있도록 원반을
3개의 기둥 사이에서 옮기는 문제. 모든 원반은 크기가 다르고 처음에는 모든 원반이 규칙에 맞게
첫번쨰 기둥에 쌓여 있다. 이 상태에서 모든 원반을 세 번쨰 기둥으로 최소의 횟수로 옮기면 된다.
원반은 1개씩만 옮길 수 있고 큰 원반을 작은 원반 위에 쌓을 수 는 없다.
import java.util.Scanner;
// 하노이의 탑
class Hanoi {
// no개의 원반을 x번 기둥에서 y번 기둥으로 옮김
static void move(int no, int x, int y) {
if (no > 1)
move(no - 1, x, 6 - x - y);
System.out.println("원반[" + no + "]을 " + x + "기둥에서 " + y + "기둥으로 옮김");
if (no > 1)
move(no - 1, 6 - x - y, y);
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.println("하노이의 탑");
System.out.print("원반 개수:");
int n = stdIn.nextInt();
move(n, 1, 3); // 1번 기둥의 n개를 3번 기둥으로 옮김
}
}
해당 move 메서드의 매개변수 no는 옮겨야 할 원반의 개수, x는 시작 기둥의 번호, y는 목표 기둥의 번호.
기둥 번호를 1,2,3으노 나타내고, 기둥 번호의 합이 6이므로 시작 기둥, 목표 기둥이 어느 기둥이더라도 중간 기둥은 6 - x- y로 구할 수 있다. 원반은 no개 이므로 다음과 같은 과정을 거치고, 1번, 3번 과정은 재귀 호출에 의해 해결한다.
1. 바닥 원반을 제외한 그룹(원반[1] ~원반[no-1]을 시작 기둥에서 중간 기둥으로 옮김
2. 바닥 원반 no를 시작 기둥에서 목표 기둥으로 옮겼음을 출력
3. 바닥 원반을 제외한 그룹(원반[1]~원반[no-1)을 중간 기둥에서 목표 기둥으로 옮긴다.
-출처: 자료구조와 함꼐 배우는 알고리즘 입문[자바편] 책 중
http://www.yes24.com/Product/Goods/60547893
'개발 > Java' 카테고리의 다른 글
자료구조&기본 알고리즘 입문(자바)- 재귀 알고리즘(2) (0) | 2022.02.12 |
---|---|
자료구조&기본 알고리즘 입문(자바)- 재귀 알고리즘(1) (0) | 2022.02.06 |
자료구조&기본 알고리즘 입문(자바)- 큐 (0) | 2022.02.03 |
자료구조&기본 알고리즘 입문(자바)- 스택 (0) | 2022.01.30 |
자료구조&기본 알고리즘 입문(자바)- 복잡도 (0) | 2022.01.27 |
Comments