๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํ•˜๋…ธ์ด์˜ ํƒ‘

by Fomagran ๐Ÿ’ป 2021. 10. 31.
728x90
๋ฐ˜์‘ํ˜•

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ•˜๋…ธ์ด์˜ ํƒ‘

ํ•˜๋…ธ์ด ํƒ‘(Tower of Hanoi)์€ ํผ์ฆ์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค. ์„ธ ๊ฐœ์˜ ๊ธฐ๋‘ฅ๊ณผ ์ด ๊ธฐ๋™์— ๊ฝ‚์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ๊ฐ€ ๋‹ค์–‘ํ•œ ์›ํŒ๋“ค์ด ์žˆ๊ณ , ํผ์ฆ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—๋Š” ํ•œ ๊ธฐ๋‘ฅ์— ์›ํŒ๋“ค์ด ์ž‘์€ ๊ฒƒ์ด ์œ„์— ์žˆ๋„๋ก ์ˆœ์„œ๋Œ€

programmers.co.kr


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

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€