ํ๋ ธ์ด ํ ๋ฌธ์ (Hanoi Tower problem)๋ ์ฌ๊ท์ ์๊ณ ๋ฆฌ์ฆ์ ์ ํ์ ์ธ ์
์ฃผ์ด์ง ์๋ฐ์ด ์ธ ๊ฐ์ ๊ธฐ๋ฅ ์ค ํ๋์์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๋ ์ต์ ํ์๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ชฉํ
๊ฐ ๊ธฐ๋ฅ์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ์๋ฐ์ ์๋ฉํ ์ ์์ผ๋ฉฐ, ํ ๋ฒ์ ํ๋์ ์๋ฐ๋ง ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธธ ์ ์๋ค.
ํ๋ ธ์ด ํ ๋ฌธ์ ์ ๊ท์น
- ์ธ ๊ฐ์ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ, ์๋ฐ์ด ํ๋์ ๊ธฐ๋ฅ์์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ์ด๋ํด์ผ ํ๋ค
- ํ ๋ฒ์ ํ๋์ ์๋ฐ๋ง ์ด๋ํ ์ ์๋ค
- ์์ ์๋ฐ์ด ํฐ ์๋ฐ ์์ ์์ ์ ์๋ค
- B๋ C์ ๊ฐ์ ์ค๊ฐ์ ๋ง๋๋ฅผ ์์์ ์ผ๋ก ์ด์ฉํ ์ ์์ผ๋, ์์ ์กฐ๊ฑด๋ค์ ์ง์ผ์ผ ํ๋ค.
์ฌ๊ท์ ์๊ณ ๋ฆฌ์ฆ
n๊ฐ์ ์๋ฐ์ A์์ C๋ก ์ฎ
๊ธฐ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์:
- n-1๊ฐ์ ์๋ฐ์ A์์ B๋ก ์ฎ๊น
- ๋จ์ ๊ฐ์ฅ ํฐ ์๋ฐ์ A์์ C๋ก ์ฎ๊น
- 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;
}
'C Programming Language > C' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C์ธ์ด ์ ๋ ฌ๊ณผ ํ๋ ฌ์ ๋ํด ํ์ตํ๊ธฐ (0) | 2024.07.01 |
---|---|
C์ธ์ด ๋ฐฐ์ด์ ๋ํด ํ์ตํ๊ธฐ (0) | 2024.06.19 |
C์ธ์ด static, register, volatile ์ง์ ์ ๊ฐ๋ (2) | 2024.06.19 |
C์ธ์ด ์ ์ญ๋ณ์์ ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์(+๊ฐ๋ณ๋งค๊ฐ๋ณ์)์ ๊ฐ๋ (2) | 2024.06.19 |
C์ธ์ด ์ฌ์ฉ์ ์ ์ ํจ์ (0) | 2024.06.19 |