1. ๋ฌธ์ ์ค๋ช
11729๋ฒ ํ๋ ธ์ด ํ ์ด๋ ์์ ๋งํฌ
์ด๋ ์์๋ฅผ Log๋ก ์ฐ์ด์ผ ํ๋ค.
2. ํธ๋ ์๋ฆฌ
์ฌ๊ท๋ฅผ ์ด์ฉํ๋ค.
(0) ์ฌ๊ทํจ์์๋ ์ถ๋ฐ์ง, ๊ฒฝ์ ์ง, ๋์ฐฉ์ง, ๋์ฐฉ์ง๊น์ง ์ฎ๊ฒจ์ผ ํ๋ ์ํ์ ๋ฒํธ๊ฐ ์๋ค.
(์ํ์ ๋ฒํธ๊ฐ ํฐ ๊ฒ์ด ํฌ๊ธฐ๊ฐ ํฐ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ ์ผ ์์ ์ํ์ ๋ฒํธ๊ฐ 1์ด๋ค.)
(1) ์ค์ ๋ก ์ํ์ ์ฎ๊ธฐ๋ ๊ฒ์ด ์๋๋ผ, ๊ทธ ์ด๋ ์์์ ๋ํ ๋ก๊ทธ๋ง ์ฐ๋๋ค.
[๊ธฐ์ ์กฐ๊ฑด]
(1)์ฎ๊ฒจ์ผํ๋ ์ํ์ ๋ฒํธ๊ฐ 0์ด ๋๋ฉด ๊ทธ๋ฅ return ํ๋ค.
[๊ณ์ฐ]
(1) ํ์ฌ ์ฎ๊ฒจ์ผํ ์ํ๋ณด๋ค ์์ ๋ชจ๋ ์ํ์ ๊ฒฝ์ ์ง๋ก ์ฎ๊ธฐ๋ Log๋ฅผ ์ฐ๋๋ค. (์ฌ๊ท ์ด์ฉ)
(2) start์ end๋ฅผ StringBuilder์ ๋ด์์ ํ์ฌ ์ํ์ ์ด๋์ Log๋ก ์ฐ๋๋ค. (StringBuilder์ ๋ด๋ ํ์ ์์ฒด๊ฐ ์ฎ๊ธฐ๋ ํ์)
(3) ๊ฒฝ์ ์ง์ ์๋ ๋ชจ๋ ์ํ์ ํ์ฌ ์ํ ์๋ก ์ฎ๊ธฐ๋ Log๋ฅผ ์ฐ๋๋ค. (์ฌ๊ท ์ด์ฉ)
[์์ ํ์ด]
๋ค์์ ๊ณ์ฐ์ (1)์ ์ฌ๊ท ๊ณผ์ ์ ์์์ผ๋ก ์ฐ์ด๋ณด์๋ค.
(3)์ ๋ฉ์ด๋ฆฌ์งธ ์ด๋์ผ๋ก ์๋ต ํ์์ผ๋ก, (1)๋ฒ ๋ถ๋ถ์ด ์ด๋ป๊ฒ ์์ง์ด๋์ง ๋ณด๊ณ ์ดํดํด๋ณด์!
3. ์ฝ๋ ๋ถ์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
* 11729๋ฒ [ํ๋
ธ์ด ํ ์ด๋ ์์]
* */
public class Main {
static StringBuilder sb = new StringBuilder();
static int movingCnt = 0;
public static void main(String[] args) throws IOException {
// 1. ๊ฐ ์
๋ ฅ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// ์ํ ๊ฐฏ์
int diskCnt = Integer.parseInt(br.readLine());
Hanoi(1,2,3, diskCnt);
System.out.println(movingCnt);
System.out.println(sb);
}
/*
* Hanoi(์ถ๋ฐ์ง, ๊ฒฝ์ ์ง, ๋์ฐฉ์ง, ์ฎ๊ธฐ๋ ์ํ์ ๋๋ฒ๋ง)
* -> ๋จผ์ diskNum-1 ๋ถํฐ ๊ทธ ์ ์ํ๋ค ๋ชจ๋๋ฅผ ๊ฒฝ์ ์ง๋ก ์ฎ๊ธด๋ค. -> ์ด๋ค์ ๊ฒฝ์ ์ง ์์ฒด๊ฐ ์ต์ข
๋์ฐฉ์ง๊ฐ ๋จ.
* -> ๋งจ ๋ฐ์ diskNum์ ๋์ฐฉ์ง๋ก ์ฎ๊ธด๋ค.
* -> diskNum-1 ๋ถํฐ ๊ทธ ์๋ถ๋ถ ๋ชจ๋๋ฅผ ๋์ฐฉ์ง๋ก ์ฎ๊ธด๋ค.
* */
public static void Hanoi (int start, int middle, int end, int diskNum) {
if(diskNum == 0){
return;
}
Hanoi(start, end, middle, diskNum-1);
sb.append(start).append(" ").append(end).append("\n");
movingCnt++;
Hanoi(middle,start,end,diskNum-1);
}
}