[PS] 99ํด๋ฝ ์ฝํ ์คํฐ๋ 7์ผ์ฐจ TIL (ํ๋ ธ์ด์ ํ)
ํ๊ทธ: 99ํด๋ฝ, PS, TIL, ์ฌ๊ท, ์ฝ๋ฉํ ์คํธ์ค๋น, ํญํด99
์นดํ ๊ณ ๋ฆฌ: PS
๋ฌธ์
ํ์ด
์๋ฅผ๋ค์ด n = 5 ์ธ ๊ฒฝ์ฐ ํ์ ์ฎ๊ธฐ๋ ค๋ฉด ๋จผ์ ๋งจ ์๋ ์๋ฐ์ ์ ์ธํ (n - 1) ๊ฐ์ ์๋ฐ์ ์์ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ฒจ์ผ ํ๋ค. ๊ทธ ํ ๋งจ ์๋ ์๋ฐ์ ๋ชฉ์ ์ง ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๊ณ , ๊ทธ ์๋ก ์์ ๊ธฐ๋ฅ์ ์๋ฐ์ ๋ชจ๋ ์ฎ๊ธฐ๋ฉด ๋๋ค.
์ฆ, ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ์งํํด์ผ ํ๋ค.
- (n - 1) ๊ฐ์ ์๋ฐ์ 1๋ฒ ๊ธฐ๋ฅ์์ 2๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๊ณ ,
- ์ ์ผ ํฐ ์๋ฐ์ 1๋ฒ ๊ธฐ๋ฅ์์ 3๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๊ณ ,
- (n - 1) ๊ฐ์ ์๋ฐ์ 2๋ฒ ๊ธฐ๋ฅ์์ 3๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธด๋ค.
๋งจ ์๋์ชฝ ์๋ฐ์ด end ์ชฝ์ผ๋ก ๊ฐ๊ฒ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ๋ ๊น? ๋ค์ ๊ทธ๋ฆผ์ฒ๋ผ ๋จผ์ ๋งจ ์๋ ์๋ฐ์ ์ ์ธํ 4๊ฐ์ ์๋ฐ์ tmp ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ฒจ์ผ ํ๋ค.
4๊ฐ์ ์๋ฐ์ tmp ๋ก ์ฎ๊ธฐ๊ณ ๋๋ฉด ๋ค์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋งจ ์๋์ ์๋ ์๋ฐ์ end ๋ก ์ฎ๊ธธ ์ ์๊ฒ ๋๋ค.
์ง๊ธ๊น์ง์ ๊ณผ์ ๊ณผ ์์ผ๋ก ์งํ๋ ๊ณผ์ ์ ์ข ๋ ์์ธํ ์ดํด๋ณด๋ฉด
- 5๊ฐ์ ์๋ฐ์ ์ฎ๊ธฐ๋ ๊ณผ์ ์ 4๊ฐ์ ์๋ฐ์ ์ฎ๊ธฐ๋ ์์ ์ด ์ ํ ๋์๊ณ ,
- ํฐ ์๋ฐ์ end ๋ก ์ฎ๊ธฐ๋ ์์ ์ด ์งํ๋์๊ณ ,
- ํ์ฌ tmp ์ ์์ฌ ์๋ 4๊ฐ์ ์๋ฐ๋ค์ ๋ค์ end ๋ก ์ฎ๊ธฐ๋ ์์ ์ด ํ์ํ๋ค.
์ฆ, n = 5์ ๊ณผ์ ์ n = 4์ ๊ณผ์ ์ด ํ๋ฒ ์ํ๋ ๋ค, ํฐ ์๋ฐ์ ์ฎ๊ธฐ๊ณ , ๋ค์ n = 4์ ๊ณผ์ ์ด ์ํ๋๋ค. ๋ค๋ง ๊ทธ ๊ณผ์ ์์ ์์ ์ด ์์๋ ๊ธฐ๋ฅ(start)๊ณผ ์๋ฐ์ด ๋ชจ์ผ ๊ธฐ๋ฅ(end)์ ์์น๋ง ๋ณ๊ฒฝ๋ ๋ฟ์ด๋ค.
์๋๋ n = 4 ๋ถํฐ 1๊น์ง์ ๋๋ต์ ์ธ ๊ณผ์ ์ ๋ํ๋ธ ๊ฒ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋งจ ์๋ ์๋ฐ์ ์ ์ธํ ๋๋จธ์ง ์๋ฐ๋ค์ ๋ชจ๋ ์ฎ๊ธฐ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ด ์๋ ๊ธฐ๋ฅ(end) ์ผ๋ก ์ฐ์ ์ฎ๊ฒจ์ผ ํ๋ค ์ด ๊ณผ์ ์ด n = 1 ์ด ๋ ๋ ๊น์ง ๋ฐ๋ณต ๋๋ค.
์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
int index = 0;
int[][] answer;
public int[][] solution(int n) {
answer = new int[(int) (Math.pow(2, n) - 1)][2];
hanoi(n, 1, 3, 2);
return answer;
}
void hanoi(int n, int start, int end, int tmp) {
if (n == 1) {
record(start, end);
return;
}
hanoi(n-1, start, tmp, end); // 1
record(start, end); // 2
hanoi(n-1, tmp, end, start); // 3
}
void record(int start, int end) {
answer[index][0] = start;
answer[index][1] = end;
index++;
}
}
- ์ฝ๋์ 1๋ฒ ๋ถ๋ถ์ด ์ 3๋ฒ ๊ทธ๋ฆผ์ ํด๋นํ๋ค. n ์ด 5์ผ๋ ์ฝ๋์ 1๋ฒ ๋ถ๋ถ์ 4๋ฒ ์คํ๋๊ณ tmp ์ 4๊ฐ์ ์๋ฐ์ด ์์ฌ ์์ ๊ฒ์ด๋ค.
- ์ฝ๋์ 2๋ฒ ๋ถ๋ถ์ด ํฐ ์๋ฐ์ start ์์ end ๋ก ์ด๋ํ๋ ๋ถ๋ถ์ด๋ค. ๋ฐฐ์ด์ ์์ ์์น์ ๋ ์์น๋ฅผ ๊ธฐ๋กํด ๋๋ค.
- ์ฝ๋์ 3๋ฒ ๋ถ๋ถ์ด tmp ์ ์๋ 4๊ฐ์ ์๋ฐ์ end ๋ก ์ด๋ํ๋ ๋ถ๋ถ์ด๋ค. n = 1 ์ด ๋๋ฉด 1๊ฐ์ ์๋ฐ๋ง ์ฎ๊ธฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ๋ฐฐ์ด์ ์ด๋๊ฒฝ๋ก๋ฅผ ๊ธฐ๋กํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ answer ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๊ณง ์ต์ ์ด๋ ํ์ ์ธ๋ฐ, ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด ์ ์ ์๋ค.
hanoi(n) : n ๊ฐ์ ์๋ฐ์ ์ฎ๊ธฐ๋๋ฐ ํ์ํ ์ด๋ ํ์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
hanoi(n) = hanoi(n-1) * 2 + 1
// ์๋ณ์ + 1
hanoi(n) + 1 = 2 * (hanoi(n-1) + 1)
hanoi(n-1) + 1 = 2 * (hanoi(n-2) + 1)
hanoi(n-2) + 1 = 2 * (hanoi(n-3) + 1)
...
hanoi(2) + 1 = 2 * (honoi(1) + 1)
// ์ข๋ณ๊ณผ ์ฐ๋ณ์ ๊ณฑํ๋ค.
(hanoi(n) + 1) * (hanoi(n-1) + 1)...(hanoi(2) + 1) = 2^(n-1) * (hanoi(n-1) + 1) * (hanoi(n-2) + 1)...(hanoi(1) + 1)
// ๊ณตํต ๋ถ๋ถ ๋๋๋ค.
(hanoi(n) + 1) = 2^(n-1) * (hanoi(1) + 1)
// hanoi(1) = 1 ๋์
(hanoi(n) + 1) = 2^(n-1) * 2
hanoi(n) = 2^n -1
๋๊ธ๋จ๊ธฐ๊ธฐ