https://school.programmers.co.kr/learn/courses/30/lessons/12946
๋ฌธ์ ์ค๋ช
ํ๋ ธ์ด ํ(Tower of Hanoi)์ ํผ์ฆ์ ์ผ์ข ์ ๋๋ค. ์ธ ๊ฐ์ ๊ธฐ๋ฅ๊ณผ ์ด ๊ธฐ๋์ ๊ฝ์ ์ ์๋ ํฌ๊ธฐ๊ฐ ๋ค์ํ ์ํ๋ค์ด ์๊ณ , ํผ์ฆ์ ์์ํ๊ธฐ ์ ์๋ ํ ๊ธฐ๋ฅ์ ์ํ๋ค์ด ์์ ๊ฒ์ด ์์ ์๋๋ก ์์๋๋ก ์์ฌ ์์ต๋๋ค. ๊ฒ์์ ๋ชฉ์ ์ ๋ค์ ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋ฉด์, ํ ๊ธฐ๋ฅ์ ๊ฝํ ์ํ๋ค์ ๊ทธ ์์ ๊ทธ๋๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ฒจ์ ๋ค์ ์๋ ๊ฒ์ ๋๋ค.
- ํ ๋ฒ์ ํ๋์ ์ํ๋ง ์ฎ๊ธธ ์ ์์ต๋๋ค.
- ํฐ ์ํ์ด ์์ ์ํ ์์ ์์ด์๋ ์๋ฉ๋๋ค.
ํ๋ ธ์ด ํ์ ์ธ ๊ฐ์ ๊ธฐ๋ฅ์ ์ผ์ชฝ ๋ถํฐ 1๋ฒ, 2๋ฒ, 3๋ฒ์ด๋ผ๊ณ ํ๊ฒ ์ต๋๋ค. 1๋ฒ์๋ n๊ฐ์ ์ํ์ด ์๊ณ ์ด n๊ฐ์ ์ํ์ 3๋ฒ ์ํ์ผ๋ก ์ต์ ํ์๋ก ์ฎ๊ธฐ๋ ค๊ณ ํฉ๋๋ค.
1๋ฒ ๊ธฐ๋ฅ์ ์๋ ์ํ์ ๊ฐ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, n๊ฐ์ ์ํ์ 3๋ฒ ์ํ์ผ๋ก ์ต์๋ก ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ์ returnํ๋ solution๋ฅผ ์์ฑํด์ฃผ์ธ์.
๋ด ํ์ด
์ฌ๊ท์ ๊ฝ ํ๋ ธ์ด์ ํ ๋ฌธ์ ! ์์ ์๋ ์ ๋ง ์ด๋ ต๊ฒ ๋๊ปด์ก๋๋ฐ ๋ค์ ํ์ด๋ณด๋ ์ดํด๊ฐ ์ด๋ ต์ง ์์๋ค.
#include <string>
#include <vector>
using namespace std;
void MoveDisk(vector<vector<int>>& answer, int n, int start, int dest)
{
// ์ฎ๊ธฐ๋ ค๋ ์ํ์ด 1๊ฐ์ธ ๊ฒฝ์ฐ ์ฎ๊ธฐ๊ณ ๋ฐํํด์ค๋ค
if(n == 1)
{
answer.push_back({start, dest});
return;
}
// n-1 ๊ฐ์ ์ํ์ ์์์ ํน์ ๋ชฉํ์ง์ ์ด ์๋ ๋๋จธ์ง ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธด๋ค.
MoveDisk(answer, n-1, start, 6-start-dest);
// n๋ฒ์งธ ์ํ์ ๋ชฉํ์์ ์ผ๋ก ์ฎ๊ธด๋ค.
answer.push_back({start, dest});
// ๋๋จธ์ง ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ฒจ์ง n-1๊ฐ์ ์ํ์ ๋ชฉํ ์ง์ ์ผ๋ก ์ฎ๊ธด๋ค.
MoveDisk(answer, n-1, 6-start-dest, dest);
}
vector<vector<int>> solution(int n) {
vector<vector<int>> answer;
MoveDisk(answer, n, 1, 3);
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - [์นด์นด์ค ์ธํด] ์์ ์ต๋ํ(C++) (0) | 2023.07.24 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ ๊ฐ์(C++) (0) | 2023.07.23 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์บ์(C++) (0) | 2023.07.20 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ํํ(C++) (0) | 2023.07.18 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์ ์ฐ๊ธฐ(C++) (0) | 2023.07.17 |