ํ๋ ธ์ด ํ ๊ฒ์
https://vidkidz.tistory.com/649
ํ๋ ธ์ด์ ํ (Tower of Hanoi)
ํ๋ ธ์ดํ (Tower of Hanoi) ํ๋์๊ฒ์์ ๋๋ค ๋ค์ ๋๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋ฉด์ ์ฒซ๋ฒ์งธ ๊ธฐ๋ฅ์ ์๋ ์ํ๋ค์ ์ธ๋ฒ์งธ ๊ธฐ๋ฑ์ผ๋ก ๊ทธ๋๋ก ์ฎ๊ธฐ๋ ํผ์ฆ ๊ฒ์์ ๋๋ค 1. ํ๋ฒ์ ํ๋์ ์ํ๋ง ์ฎ๊ธธ ์ ์
vidkidz.tistory.com
2) ํ๋
ธ์ด ํ
3๊ฐ์ ๊ธฐ๋ฅ์ด ์๊ณ ์๋ฐ์ ์ฎ๊ธธ ๋ ์์ ์๋ฐ์ด ํญ์ ํฐ ์๋ฐ ์์ ์ค๊ฒ ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ
์๋ฐ์ ํ๋์ฉ๋ง ์ฎ๊ธธ ์ ์๋ค.
์๋ฐ์ ์ฎ๊ธธ ๋ ์ด๋์ ์ด๋๋ก ์ฎ๊ฒผ๋์ง ์ถ๋ ฅํ์์ค.
์๋ฐ์ ์๋ฅผ ์
๋ ฅ๋ฐ๊ณ ๋ชจ๋ ์๋ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธธ ๋ ๋ช๋ฒ์ ์ด๋์ด ๋ฐ์ํ๋์ง ์ถ๋ ฅ ํ์์ค
๊ธฐ๋ฅ ๋ฒํธ๋ 1~3๋ฒ
์๋ฐ์ ๊ฐ์ฅ ์์ ์๋ฐ์ด 1 ํฐ ์๋ฐ์ผ์๋ก ์ซ์๋ฅผ 1์ฉ ์ฆ๊ฐ
-----------------------------------------------------------------------------------------
์ด๋(์๋ฐ ๋ฒํธ์ from์์ to๋ก ์ฎ๊ธธ์ง๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.)
์๋ฐ ๋ฒํธ๊ฐ 1๋ณด๋ค ํฌ๋ฉด ์๋ฐ ๋ฒํธ -1์ from์์ from๊ณผ to๊ฐ ์๋ ๊ณณ์ผ๋ก ์ด๋
์๋ฐ ๋ฒํธ๋ฅผ from์์ to๋ก ์ฎ๊ฒผ๋ค๊ณ ์ถ๋ ฅ
์๋ฐ ๋ฒํธ๊ฐ 1๋ณด๋ค ํฌ๋ฉด ์๋ฐ ๋ฒํธ -1์ from๊ณผ to๊ฐ ์๋ ๊ณณ์์ to๋ก ์ด๋
1 . ์ ํ์ ์ด์ฉ
Hanoi(n) = 2 × Hanoi(n-1) + 1 ์์ ์ฐฉ์ํ์ฌ ๋์จ ์ ํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
๐๐ = 2^n - 1
public class Hanoi {
int hanoi1(int n){
return (int) (Math.pow(2, n)-1);
}
}
public class HanoiMain{
public static void main(String[] args) {
Hanoi hanoi = new Hanoi();
System.out.println(hanoi.hanoi1(3));
System.out.println(hanoi.hanoi1(4));
System.out.println(hanoi.hanoi1(5));
}
}
2. ์ฌ๊ท ํจ์ ์ด์ฉ
void hanoi2(int n, int from, int mid, int to){
if(n==1){
return;
}
//n-1๊ฐ๋ฅผ ์ค๊ฐ์ผ๋ก ์ด๋
hanoi2(n-1, from, to, mid);
//๊ฐ์ฅ ์๋ ์๋ฐ์ to๋ก ์ด๋
System.out.println("["+n + "] " + from + " ์์ " + to + "์ผ๋ก ์ด๋");
//n-1๊ฐ๋ฅผ ์ค๊ฐ์์ to๋ก ์ด๋
hanoi2(n-1, mid, from,to);
}
public class HanoiMain {
public static void main(String[] args) {
Hanoi hanoi = new Hanoi();
hanoi.hanoi2(3, 1, 2, 3);
System.out.println();
hanoi.hanoi2(4, 1, 2, 3);
}
}
2-2 ์ฌ๊ท ํจ์ ์ด์ฉ
void hanoi3(int num, int from, int to){
count++;
//n-1๊ฐ๋ฅผ from๋ to๋ ์๋ ๊ณณ์ผ๋ก ์ด๋!
if(num>1) {
hanoi3(num-1, from, 6-from-to);
}
System.out.printf("์๋ฐ %d๋ฅผ %d๋ฒ ๊ธฐ๋ฅ์์ %d๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ด๋ํ๋ค.", num, from, to);
// n-1์ from๋ to๋ ์๋ ๊ณณ์์ to๋ก ์ด๋
if(num > 1) {
hanoi3(num - 1, 6 - from - to, to);
}
}
์ฐธ๊ณ
'โก๐ฉโ๐ป โก > ยบ Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์ต๋จ ๊ฑฐ๋ฆฌ | A-Star ์๊ณ ๋ฆฌ์ฆ (A* algorithm) ๊ตฌ (0) | 2023.12.08 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๋ฆฌ์คํธ (List) ๊ตฌํ (Java) (0) | 2023.12.05 |
[์๋ฃ๊ตฌ์กฐ] ํ (Queue) ๊ตฌํ (Java) (0) | 2023.12.04 |
[Java] ์ฌ๊ท | ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ(์ต๋ ๊ณต์ฝ์ ๊ตฌํ๊ธฐ) (0) | 2023.12.04 |
[์๋ฃ๊ตฌ์กฐ] ์คํ (Stack) ๊ตฌ์กฐ (Java) (3) | 2023.12.04 |