We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 11729๋ฒˆ: ํ•˜๋…ธ์ด ํƒ‘ ์ด๋™ ์ˆœ์„œ

Redddy 2022. 4. 25. 17:24

๐Ÿ“Ž๋ฌธ์ œ๋งํฌ: https://www.acmicpc.net/problem/11729

 

11729๋ฒˆ: ํ•˜๋…ธ์ด ํƒ‘ ์ด๋™ ์ˆœ์„œ

์„ธ ๊ฐœ์˜ ์žฅ๋Œ€๊ฐ€ ์žˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—๋Š” ๋ฐ˜๊ฒฝ์ด ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›ํŒ์ด ์Œ“์—ฌ ์žˆ๋‹ค. ๊ฐ ์›ํŒ์€ ๋ฐ˜๊ฒฝ์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์Œ“์—ฌ์žˆ๋‹ค. ์ด์ œ ์ˆ˜๋„์Šน๋“ค์ด ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—์„œ ์„ธ ๋ฒˆ์งธ ์žฅ๋Œ€๋กœ

www.acmicpc.net

 

๐Ÿ’ผ์„œ๋ก  

์˜ˆ์ „์— ํ•œ๋ฒˆ ๋ง›๋ณด๋‹ค๊ฐ€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋ถ๋งˆํฌ ๋‚จ๊ธฐ๊ณ  ์žˆ๋˜ ๋ฌธ์ œ์˜€๋Š”๋ฐ, ์Šคํ„ฐ๋””๋ฅผ ํ†ตํ•ด ์ฑ…์ž„๊ฐ์„ ๊ฐ–๊ณ  ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์Šคํ„ฐ๋””์—์„œ ํƒํ–ˆ๋‹ค

 

๐Ÿงฉ๋ฌธ์ œ ํ•ด์„

์žฌ๊ท€! ํ•˜๋ฉด ๋น ์งˆ ์ˆ˜ ์—†๋Š” ํ•˜๋…ธ์ดํƒ‘
์›ํŒ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ด๋™ํšŸ์ˆ˜์™€ ์ด๋™๊ฒฝ๋กœ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค 

 

๐Ÿ“€์›ํŒ ์ด๋™ ํšŸ์ˆ˜

์›ํŒ์˜ ์ด๋™ ํšŸ์ˆ˜ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ๊ฒŒ ์œ ์ถ”ํ•ด๋ƒˆ๋‹ค.
n๊ฐœ์˜ ์›ํŒ์„ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์€ n-1๊ฐœ์˜ ์›ํŒ์„ ์ด๋™์‹œํ‚จ๋‹ค์Œ ์ œ์ผ ๋ฐ‘์— ์žˆ๋Š” ์›ํŒ ํ•˜๋‚˜๋ฅผ ๋ชฉํ‘œ ์žฅ๋Œ€์— ์˜ฎ๊ธฐ๊ณ  ๋‹ค์‹œ n-1๊ฐœ์˜ ์›ํŒ์„ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. 
์ฆ‰ a(n) = a(n-1)+1+a(n-1) ์ธ๊ฒƒ์ด๋‹ค.
a(1) = 1, a(2)= 3 ์ด๋‹ค. 
์ด๊ฒŒ ๋‚ด ์ฝ”๋“œ์—์„œ๋Š” ํ•จ์ˆ˜ hanoi_top_cnt() ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค.

ํ•˜๋…ธ์ด ํƒ‘ ์ด๋™ํšŸ์ˆ˜

 

 

๐Ÿƒ‍โ™‚๏ธ์›ํŒ ์ด๋™ ๊ฒฝ๋กœ๐Ÿƒ‍โ™€๏ธ

 

์–ด๋ ค์šด ๊ฒƒ์€ ์ด๋ถ€๋ถ„์ด์—ˆ๋‹ค. ์—ด์‹ฌํžˆ A4์šฉ์ง€์— ๋„์ ๋„์ ํ•˜์—ฌ ๊ทœ์น™์„ ์•Œ์•„๋‚ด๋Š”๋Œ€์—๋Š” ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ์ฝ”๋“œ๊ตฌํ˜„๊นŒ์ง€๋Š” ์•„์‰ฝ๊ฒŒ๋„ ์‹คํŒจํ•˜์˜€๋‹ค. ๋‹ด๋ฒˆ์— ๋‹ค์‹œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„์ „ํ•ด๋ณผ๊ฒƒ์ด๋‹ท!

๋‚™์„œ๋„์ ๋„์ 

๋‚™์„œ๋„ ๋‹ค์Œ๋ฒˆ์—๋Š” ํ‹ฐ์Šคํ† ๋ฆฌ์— ๊ฐœ์‹œํ• ๊ฑฐ ์ƒ๊ฐํ•˜๊ณ  ์กฐ๊ธˆ๋” ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ ์–ด์•ผ์ง€..ใ…Ž ์•„๋ฌด์ƒ๊ฐ์—†์ด ์ ๊ณ  ์˜ฌ๋ ค๋ณด๋‹ˆ ๋„ˆ๋ฌด ๋‚œ์žก(?)

 

์›ํŒ ์ด๋™์˜ ๊ธฐ๋ณธ์ ์ธ ๋งค์ปค๋‹ˆ์ฆ˜์€ ์•ž์„œ ๋งํ–ˆ๋‹ค์‹œํ”ผ ์›ํŒ n๊ฐœ๊ฐ€ ์žˆ์œผ๋ฉด ์›ํŒ n-1๊ฐœ๋ฅผ ๋ชฉํ‘œ ์žฅ๋Œ€๊ฐ€ ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์žฅ๋Œ€์— ์˜ฎ๊ธฐ๊ณ  ์ œ์ผ ํฐ ์›ํŒ์„ ๋ชฉํ‘œ ์žฅ๋Œ€์— ์˜ฎ๊ธฐ๊ณ , ๋‹ค์‹œ n-1๊ฐœ์˜ ์›ํŒ์„ ๋ชฉํ‘œ ์žฅ๋Œ€์— ์˜ฎ๊ธด๋‹ค.

 

1. n-1๊ฐœ์˜ ์›ํŒ์„ ๋ชฉํ‘œ์žฅ๋Œ€๊ฐ€ ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์žฅ๋Œ€์— ์˜ฎ๊น€

2. ์ œ์ผ ํฐ ์›ํŒ์„ ๋ชฉํ‘œ ์žฅ๋Œ€๋กœ ์˜ฎ๊น€

3. n-1๊ฐœ์˜ ์›ํŒ์„ ๋ชฉํ‘œ์žฅ๋Œ€๋กœ ์˜ฎ๊น€

 

 

์ด๊ฒƒ์ด ํ•˜๋…ธ์ด ํƒ‘ ์›ํŒ์„ ์˜ฎ๊ธฐ๋Š” ์ตœ์†Œ๊ฒฝ๋กœ์ด๋‹ค.

 

ํ•˜๋…ธ์ด ํƒ‘ ์ด๋™ ๊ฒฝ๋กœ

 

์ค‘๊ฐ„์— 6-start-end๊ฐ€ ๋ณด์ด๋Š”๋ฐ ์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” "ํ˜„์žฌ ์žˆ๋Š”๊ณณ๋„ ์•„๋‹ˆ๊ณ  ๊ทธ๋ฆฌ๊ณ  ๋ชฉํ‘œ์ง€์ ์ด ์•„๋‹Œ ๊ณณ" ์ด๋‹ค.

์žฅ๋Œ€๊ฐ€ 1,2,3 ์ด๋ ‡๊ฒŒ ์žˆ๋‹ค. ํ˜„์žฌ n๊ฐœ์˜ ์›ํŒ์ด 1์— ์œ„์น˜ํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์›ํŒ์„ 3์— ์œ„์น˜์‹œ์ผœ์•ผ ํ•œ๋‹ค๋ฉด, n-1๊ฐœ์˜ ์›ํŒ์€ 2์— ์œ„์น˜์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์ฆ‰ ํ˜„์žฌ์œ„์น˜(1)์™€ ๋ชฉํ‘œ์žฅ๋Œ€(3)๊ฐ€ ์•„๋‹Œ ๊ณณ์œผ๋กœ n-1์„ ์ด๋™์‹œ์ผœ์•ผ ํ•˜๋Š”๋ฐ ์žฅ๋Œ€๋Š” 1,2,3๊ฐœ ์žˆ๊ธฐ์— 6-1-3 ํ•˜๋ฉด n-1์›ํŒ์˜ ์ด๋™์œ„์น˜(2)๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

 

๐Ÿ’ป์ฝ”๋“œ

def hanoi_top_move(n, start, end):
    if n == 1:
        print(start, end)
        return
    
    hanoi_top_move(n-1, start, 6-start-end)
    print(start, end)
    hanoi_top_move(n-1, 6-start-end, end)

def hanoi_top_cnt(n):
    if n == 1:
        return 1
    else:
        return hanoi_top_cnt(n-1)*2 + 1

n = int(input())
print(hanoi_top_cnt(n))
hanoi_top_move(n, 1, 3)