Problem
Solution
์ด๋ฒ ๋ฌธ์ ์ ํต์ฌ์ ์ฌ๊ท๋ฅผ ์ด์ฉํ๋ ๊ฒ ์ ๋๋ค.
์๋์ ๊ฐ์ด n๊ฐ์ ์ํ์ด 1๋ฒ ๊ธฐ๋ฅ์ ๋ชจ๋ ์์ต๋๋ค.
1. 1๋ฒ ๊ธฐ๋ฅ์ ์๋ ์ํ ์ค ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ํ์ ์ ์ธํ ์ํ(n-1๊ฐ)์ ๋ชจ๋ 2๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊น๋๋ค.
2. ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ํ์ 3๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊น๋๋ค.
3. 2๋ฒ์ ์๋ n-1๊ฐ์ ์ํ์ ๋ชจ๋ 3๋ฒ์ผ๋ก ์ฎ๊น๋๋ค.
ํ๋ ธ์ด์ ํ์ ํธ๋ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ์ค๋ช ๋๋ฆฌ๋ฉด ์์ ๊ฐ์ด ์งํ๋ฉ๋๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์ ์๋ฌธ์ด ๋ค์ฃ ?
"์ ์ฒด์ ์ธ ๊ณผ์ ์ ์๊ฒ ์ด... ๊ทผ๋ฐ n-1๊ฐ์ ์ํ๋ค์ ์ด๋ป๊ฒ ํ๋ฒ์ ์ฎ๊ฒจ?๐ค"
์ฌ๊ธฐ์ ์ฌ๊ท ํธ์ถ์ด ํ์ํฉ๋๋ค.
๋ฐ๋ก ํฐ ๋ฌธ์ ๋ฅผ ์์ ๊ฒ์ผ๋ก ๋ง๋ค์ด์ ํ๋ ํ๋ ํ์ด๊ฐ๋ ๊ฒ์ด์ฃ .
์, ๋จผ์ 4๊ฐ์ ์ํ์ด ์๋ค๊ณ ๊ฐ์ ํ ๊ฒ์.
์ฌ๊ธฐ์ 2๋ฒ ๊ธฐ๋ฅ์ n-1๊ฐ ์ฆ, 3๊ฐ์ ์ํ์ ์ฎ๊ฒจ์ผ ํ์ฃ ?
ํ์ง๋ง ํ ๋ฒ์ 3๊ฐ์ ์ํ์ ์ฎ๊ธธ ์๋ ์์ต๋๋ค.
๊ทธ๋ผ ๋ ์๊ฒ ๋จผ์ ์์ 2๊ฐ์ ์ํ์ ์ฎ๊ธฐ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
ํ์ง๋ง 2๊ฐ์ ์ํ๋ ์ฎ๊ธธ์๊ฐ ์์ฃ ?
๋ ์๊ฒ 1๊ฐ์ ์ํ๋ง ์ฎ๊ธฐ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
1๊ฐ์ ์ํ์ ์ฎ๊ธธ ์ ์์ผ๋ฏ๋ก 2๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊น๋๋ค.
์ ์ด๋ ๊ฒ ๊ฐ์ฅ ์์ ๋จ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ฐ๋ก ์ ๋จ๊ณ์ ๋ฌธ์ ์ธ 2๊ฐ์ ์ํ ์ฎ๊ธฐ๊ธฐ์ ๋์ ํด๋ณด์ฃ .
๋จผ์ ๋ ๋ฒ์งธ๋ก ๊ฐ๋ฒผ์ด ์ํ์ 3๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊น๋๋ค.
2๋ฒ์ ์๋ ๊ฐ์ฅ ๊ฐ๋ฒผ์ด ์ํ์ 1๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธด ๋ค 3๋ฒ ๊ธฐ๋ฅ์ ์๋ ์ํ์ 2๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊น๋๋ค.
๋ง์ง๋ง์ผ๋ก 1๋ฒ ๊ธฐ๋ฅ์ ์ํ์ 2๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊น๋๋ค.
์ด๋ฐ์์ผ๋ก ์์ ๋ฌธ์ ๋ค์ ํ๋์ฉ ํด๊ฒฐํด ๋๊ฐ๋ฉด n-1๊ฐ์ ์ํ์ 2๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธธ ์ ์๊ฒ ์ฃ ?
๋ฐ๋ก ์ด๊ฒ์ด ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋ฉด์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ๋ฐ๋ก ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
์ฝ๋ ์ค๋ช
์ด์ ์ฝ๋๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ๋จผ์ ์ฎ๊ธฐ๋ ๊ณผ์ ์ ๋ด์ answer๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
var answer: [[Int]] = []
๋จผ์ ์ํ์ ์ฎ๊ธธ ์ ์๋ ์กฐ๊ฑด์ ๋ง๋ค์ด์ค๋๋ค.
์ํ์ ์ฎ๊ธธ ์ ์๋ ์กฐ๊ฑด์ ์ํ์ด 1๊ฐ ๋จ์์ ๋ ์ ๋๋ค.
๊ณ ๋ก n์ด 1์ด๋ผ๋ฉด answer์ from์์ to๋ก ์ฎ๊ธด ๊ณผ์ ์ ๋ฃ์ด์ค๋๋ค.
func move(n: Int, from: Int, to: Int, via: Int){
if n == 1 {
answer.append([from,to])
}
1. ๋ง์ฝ n์ด 1์ด ์๋๋ผ๋ฉด 1๋ฒ์์ 2๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๋ ์์ ์ ์ฌ๊ท ํธ์ถํด์ค๋๋ค.
else {
move(n: n-1,from: from, to: via, via: to)
2. ๋ค ์ฎ๊ธด ๋ค์์ 1๋ฒ ๊ธฐ๋ฅ์ ์๋ ๊ฐ์ฅ ๋ฌด๊ฑฐ์ด ์ํ์ 3๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๋ ์์ ์ ๋ฃ์ด์ค๋๋ค.
answer.append([from,to])
3. ๋ง์ง๋ง์ผ๋ก 2๋ฒ ๊ธฐ๋ฅ์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฎ๊ธฐ๋ ์์ ์ ์ฌ๊ท ํธ์ถํด์ค๋๋ค.
move(n: n-1, from: via, to: to, via: from)
Source Code
๋๊ธ