C Programming Language/C

C์–ธ์–ด ์žฌ๊ท€์  ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ํ•˜๋…ธ์ด ํƒ‘ ๋ฌธ์ œ

567Rabbit 2024. 6. 19. 12:32

 

ํ•˜๋…ธ์ด ํƒ‘ ๋ฌธ์ œ(Hanoi Tower problem)๋Š” ์žฌ๊ท€์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ „ํ˜•์ ์ธ ์˜ˆ

์ฃผ์–ด์ง„ ์›๋ฐ˜์ด ์„ธ ๊ฐœ์˜ ๊ธฐ๋‘ฅ ์ค‘ ํ•˜๋‚˜์—์„œ ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ

๊ฐ ๊ธฐ๋‘ฅ์€ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ์›๋ฐ˜์„ ์ˆ˜๋‚ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์›๋ฐ˜๋งŒ ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ•˜๋…ธ์ด ํƒ‘ ๋ฌธ์ œ์˜ ๊ทœ์น™

  1. ์„ธ ๊ฐœ์˜ ๊ธฐ๋‘ฅ์ด ์žˆ์œผ๋ฉฐ, ์›๋ฐ˜์ด ํ•˜๋‚˜์˜ ๊ธฐ๋‘ฅ์—์„œ ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค
  2. ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์›๋ฐ˜๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค
  3. ์ž‘์€ ์›๋ฐ˜์ด ํฐ ์›๋ฐ˜ ์œ„์— ์žˆ์„ ์ˆ˜ ์—†๋‹ค
  4. B๋‚˜ C์™€ ๊ฐ™์€ ์ค‘๊ฐ„์˜ ๋ง‰๋Œ€๋ฅผ ์ž„์‹œ์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์•ž์˜ ์กฐ๊ฑด๋“ค์„ ์ง€์ผœ์•ผ ํ•œ๋‹ค.

 

 

 

์žฌ๊ท€์  ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

n๊ฐœ์˜ ์›๋ฐ˜์„ A์—์„œ C๋กœ ์˜ฎ

๊ธฐ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜:

  1. n-1๊ฐœ์˜ ์›๋ฐ˜์„ A์—์„œ B๋กœ ์˜ฎ๊น€
  2. ๋‚จ์€ ๊ฐ€์žฅ ํฐ ์›๋ฐ˜์„ A์—์„œ C๋กœ ์˜ฎ๊น€
  3. B์— ์žˆ๋Š” n-1๊ฐœ์˜ ์›๋ฐ˜์„ C๋กœ ์˜ฎ๊น€

 

// ๋ง‰๋Œ€ from์— ์Œ“์—ฌ์žˆ๋Š” n๊ฐœ์˜ ์›ํŒ์„ ๋ง‰๋Œ€ tmp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ง‰๋Œ€ to๋กœ ์˜ฎ๊ธด๋‹ค

#include <stdio.h>

void hanoi_tower(int n, char from, char tmp, char to)
{
	if(n == 1)
    {
    	printf("์›ํŒ 1์„ %c์—์„œ %c๋กœ ์˜ฎ๊ธด๋‹ค\n", from, to)
    }
    else
    {
    	hanoi_tower(n-1, from, to, tmp);
        printf("์›ํŒ %d์„ %c์—์„œ %c๋กœ ์˜ฎ๊ธด๋‹ค\n", n, from, to)
        hanoi_tower(n-1, tmp, from, to);
    }
}

int main(void)
{
	hanoi_tower(4, 'A', 'B', 'C');
    return 0;
}