๐ ๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/11729
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฌ๊ท์ ๋ํ ๊ฐ์ด ์๋ค. ์ฌ๊ท์ ์๋ ์์๋ n๊ฐ ๋ผ๋ ๋ชฉํ๊ฐ ์๋ค๋ฉด n-1, n-2, ... , 1 ๊น์ง ์ฐ๊ณ ๋ค์ ํ๋ ํ๋ ๋ฐ๋ก ์ฌ๋ผ์ค๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค. ์ด๋ฒ ํ๋ ธ์ด ํ ๋ฌธ์ ์์๋ ์ด๋ฌํ ์ฌ๊ท์ ๊ท์น์ด ์ ์ฉ๋๋ค. ์ด 3๊ฐ์ ์คํค์ ์ฎ๊ฒจ์ผํ๋ค๋ฉด, 2๊ฐ์ง๋ฆฌ ๋จผ์ ํด๊ฒฐ, 1๊ฐ์ง๋ฆฌ ๋จผ์ ํด๊ฒฐ ๋ค ํด๊ฒฐํ๋ฉด ๋ค์ ํ๋์ฉ ์ฌ๋ผ์..! ์ด๋ฐ ๋๋์ด๋ค. ์ด ๋ฌธ์ ๋ ์ค์ค๋ก ์๊ฐํด๋ด๊ธฐ์๋ ํ๊ณ๊ฐ ์์ด์ ๋ค๋ฅธ ํด์ค์ ๋ณด๋ฉด์ ๊ณต๋ถํ๋ค.
๐ ์ฐธ๊ณ ๋งํฌ : https://st-lab.tistory.com/m/96
- ์๋ ์ฝ๋๋ ์ ์ฐธ๊ณ ๋งํฌ๋ก ๋ถํฐ ๊ฐ์ง๊ณ ์จ ์ ๋ต ์ฝ๋์ด๋ค. ๋จผ์ ์๋ ์ฝ๋๋ฅผ ์ ์ดํดํ๊ณ , ๋๋ง์ ๋ฐฉ์๋๋ก ๋ค์ ํ๋ฒ ์์ฑํด๋ณด๋ ค๊ณ ํ๋ค.
public class Baek11729 {
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
sb.append((int) (Math.pow(2, N) - 1)).append('\n');
Hanoi(N, 1, 2, 3);
System.out.println(sb);
}
/*
N : ์ํ์ ๊ฐ์
start : ์ถ๋ฐ์ง
mid : ์ฎ๊ธฐ๊ธฐ ์ํด ์ด๋ํด์ผ ์ฅ์
to : ๋ชฉ์ ์ง
*/
public static void Hanoi(int N, int start, int mid, int to) {
// ์ด๋ํ ์๋ฐ์ ์๊ฐ 1๊ฐ๋ผ๋ฉด?
if (N == 1) {
sb.append(start + " " + to + "\n");
return;
}
// A -> C๋ก ์ฎ๊ธด๋ค๊ณ ๊ฐ์ ํ ๋,
// STEP 1 : N-1๊ฐ๋ฅผ A์์ B๋ก ์ด๋ (= start ์ง์ ์ N-1๊ฐ์ ์ํ์ mid ์ง์ ์ผ๋ก ์ฎ๊ธด๋ค.)
Hanoi(N - 1, start, to, mid);
// STEP 2 : 1๊ฐ๋ฅผ A์์ C๋ก ์ด๋ (= start ์ง์ ์ N๋ฒ์งธ ์ํ์ to์ง์ ์ผ๋ก ์ฎ๊ธด๋ค.)
sb.append(start + " " + to + "\n");
// STEP 3 : N-1๊ฐ๋ฅผ B์์ C๋ก ์ด๋ (= mid ์ง์ ์ N-1๊ฐ์ ์ํ์ to ์ง์ ์ผ๋ก ์ฎ๊ธด๋ค.)
Hanoi(N - 1, mid, start, to);
}
}
์์ ์ ๋์์๋ ๊ฒ ์ฒ๋ผ N = 3 ์ธ ๊ฒฝ์ฐ๋ก ์ง์ ๊ณผ์ ์ ํ์ธํด๋ณด๋๋ก ํ์.
Hanoi(3, 1, 2, 3) // 3๋ฒ์งธ ์ํ์ด 3๋ฒ์ผ๋ก ๊ฐ์ผํจ -> ๊ทธ์ ์ 2๋ฒ์งธ ์ํ๋ถํฐ! (N-1 ๋ฒ์งธ ์ํ๋ค์ด 2๋ฒ์ผ๋ก ๊ฐ์ผํจ)
Hanoi(2, 1, 3, 2) // 2๋ฒ์งธ ์ํ์ด 2๋ฒ์ผ๋ก ๊ฐ์ผํจ -> ๊ทธ์ ์ 1๋ฒ์งธ ์ํ๋ถํฐ! (N-1 ๋ฒ์งธ ์ํ๋ค์ด 3๋ฒ์ผ๋ก ๊ฐ์ผํจ)
Hanoi(1, 1, 2, 3) // (์ถ๋ ฅ) 1 3 -> N-1 ๋ถํฐ 1 ์ํ๊น์ง ์ด๋, N๋ฒ์งธ ์ํ์ด 2๋ฒ์ผ๋ก ๊ฐ์ฐจ๋ก
// (์ถ๋ ฅ) 1 2 -> N-1 ๋ถํฐ 2๋ฒ์ผ๋ก ๋ค์ ์ฌ๋ผ๊ฐ
Hanoi(1, 3, 1, 2) // (์ถ๋ ฅ) 3 2 -> N-1 ๋ถํฐ 1 ์ํ๊น์ง ์ด๋, N๋ฒ์งธ ์ํ์ด 3๋ฒ์ผ๋ก ๊ฐ์ฐจ๋ก
// (์ถ๋ ฅ) 1 3 -> N-1 ๋ถํฐ 3๋ฒ์ผ๋ก ๋ค์ ์ฌ๋ผ๊ฐ
Hanoi(2, 2, 1, 3) // 2๋ฒ์งธ ์ํ์ด 3๋ฒ์ผ๋ก ๊ฐ์ผํจ -> ๊ทธ์ ์ 1๋ฒ์งธ ์ํ๋ถํฐ!
Hanoi(1, 2, 3, 1) // (์ถ๋ ฅ) 2 1
// (์ถ๋ ฅ) 2 3
Hanoi (1, 1, 2, 3) // (์ถ๋ ฅ) 1 3
# ์ถ๋ ฅ๊ฐ ์ ๋ฆฌ
1 3
1 2
3 2
1 3
2 1
2 3
1 3
N-1 ๋ฒ์งธ ์ํ๋ค์ด ๋๋จธ์ง ํ ์ชฝ์ผ๋ก ์ด๋ ํ ์๋ ์๋ฆฌ์ N ๋ฒ์งธ ์ํ์ด ์ด๋ํ๋ ๊ฒ์ ์ดํด, ๊ทธ๋ฐ๋ฐ ๋๋จธ์ง N-1 ๊ฐ์ ์ํ๋ค์ด ์ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ ์์ ํ ์ดํดํ์ง ๋ชปํ ๊ฒ ๊ฐ๋ค. ์ฐธ๊ณ ๊ธ์ ๋ณด๊ณ ๋๋, ์ด์ฒํผ ๋ง์ง๋ง ๊ฐ์ฅ ํฐ ์ํ์ด ๊ทธ ์๋ฆฌ์ ์๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋จ์์ด ํ์ฌ ์์น์์ ๋ค๋ฅธ ์์น๋ก ์ฎ๊ฒจ๊ฐ๋ ์ํฉ์์์ ์ฌ๊ท ํธ์ถ์ด๋ผ๊ณ ๋ณด์๋ ๋ ๊ฒ ๊ฐ๋ค. ์์ง ์ ๋ฆฌ๊ฐ ๋ ํ์ํ ๋ฏ ํ๋ค...
'Coding Test ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Programmers] Level 2 Java ๋ฌธ์ ํ์ด (1) (0) | 2022.11.08 |
|---|---|
| [Programmers] Level 1 Java ๋ฌธ์ ํ์ด (2) (0) | 2022.10.31 |
| [๐จ ์ปค๋ฎค๋ฌ๋/7๊ธฐ/Java] ์๋ด์์ฝ์ (feat. class ์ฌ์ฉ์ ์ค์์ฑ) (0) | 2022.10.31 |
| [Programmers] Level 1 Java ๋ฌธ์ ํ์ด (1) (0) | 2022.10.29 |
| [๐ย ๋ฐฑ์ค] ๋ธ๋ก ์ฆ2 / 25305 / ์ปคํธ๋ผ์ธ (0) | 2022.10.21 |