‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/º Java

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

Trudy | ์†ก์—ฐ 2023. 12. 4. 19:31

ํ•˜๋…ธ์ด ํƒ‘ ๊ฒŒ์ž„ 

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);
        }
    }


์ฐธ๊ณ 

https://st-lab.tistory.com/96