๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 1463 ํŒŒ์ด์ฌ - 1๋กœ ๋งŒ๋“ค๊ธฐ - ๋™์  ๊ณ„ํš๋ฒ•

by ๐ŸŒปโ™š 2021. 10. 6.

๋ฐฑ์ค€ 1463 ํŒŒ์ด์ฌ

https://www.acmicpc.net/problem/1463

 

1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 106๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

์ •์ˆ˜ X๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ

  • 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด 3์œผ๋กœ ๋‚˜๋ˆ„๊ณ 
  • 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด 2๋กœ ๋‚˜๋ˆ„๊ณ 
  • ๊ทธ ์ด์™ธ๋Š” 1์„ ๋บ€๋‹ค.

ํ•ด๋‹น ๊ทœ์น™์— ๋งž์ถฐ์„œ ์—ฐ์‚ฐ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ๋”ฑ ์ƒ๊ฐ์ด ๋‚œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋™์  ๊ณ„ํš๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ์„ค์ •ํ•  ๊ฐ’์ด ๋ช…ํ™•ํ–ˆ๊ณ 
  • ๊ธฐ์กด์— ์—ฐ์‚ฐ๋œ ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ๋”ฑ ๋งž์•„ ๋–จ์–ด์กŒ๋‹ค.

 

Python ํ’€์ด 1

import sys

read = sys.stdin.readline
N = int(read())

cache = [-1] * (N+3)
cache[1] = 0
cache[2] = cache[3] = 1

for i in range(4, N+1):
    cnt = 10**6
    if i % 3 == 0:
        cnt = min(cache[i//3], cnt)
    if i % 2 == 0:
        cnt = min(cache[i//2], cnt)
    
    cache[i] = min(cache[i-1], cnt) + 1
    
print(cache[N])
  • cache๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์œ„ํ•œ ์žฌ์‚ฌ์šฉ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.
    • cache์˜ ํฌ๊ธฐ๋Š” N๋ณด๋‹ค 3์„ ํฌ๊ฒŒ ์žก์•˜๋‹ค. 1, 2๊ฐ€ N์œผ๋กœ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ๊ฐ’ ์„ค์ •ํ•  ๋•Œ Index Out if Bounds ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
  • 1,2,3 ์ผ ๋•Œ ์ดˆ๊ธฐ ๊ฐ’์ด ๋ช…ํ™•ํ•ด์„œ ์„ค์ •์„ ๋จผ์ € ์ง„ํ–‰ํ•ด์คฌ๋‹ค.
  • ์ดํ›„ 4๋ถ€ํ„ฐ N๊นŒ์ง€ ์บ์‹œ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•˜๋ฉด์„œ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค.

์ „ํ˜•์ ์ธ ๋™์  ๊ณ„ํš๋ฒ• ๋ฌธ์ œ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ํ’€์ด๋กœ ์ƒ๊ฐ๋ณด๋‹ค ์—ฐ์‚ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฒฐ๋Ÿฌ์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ดค๋‹ค.

 

 

Python ํ’€์ด 2

ํ’€์ด1๋ณด๋‹ค 10๋ฐฐ์ด์ƒ ๋น ๋ฅด๋‹ค. ์šฐ์„  ๋ฆฌ์ŠคํŠธํ˜•ํƒœ๋กœ N๊นŒ์ง€ ๋ชจ๋“  ์ˆ˜๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ˆ˜๋ฅผ ๋‚˜๋ˆ„๋ฉด์„œ ๊ผญ ํ•„์š”ํ•œ ๊ฐ’๋งŒ ํ™•์ธํ•œ๋‹ค๋Š” ์ ์—์„œ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜... ์œ„์˜ ํ’€์ด๋ณด๋‹ค ์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์–ด๋ ค์›Œํ•ด์„œ ์ด๋Ÿฐ ํ’€์ด๋ฅผ ๋ณด๋ฉด ์ฐธ ์‹ ๊ธฐํ•  ๋”ฐ๋ฆ„์ด๋‹ค.

import sys
read = sys.stdin.readline

N = int(read())
cache = {1: 0, 2: 1}

def dp(n):
    if n in cache:
        return cache[n]
	
    # ํ•ต์‹ฌ ์ฝ”๋“œ
    cnt = 1 + min(dp(n//3) + n%3, dp(n//2) + n%2)
    cache[n] = cnt
    return cnt
    
print(dp(N))
  • ๋ฆฌ์ŠคํŠธ ๋Œ€์‹  ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ์ฐพ๋Š” ์—ฐ์‚ฐ ์†๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์บ์‹œ์— ๊ฐ’์ด ์žˆ๋Š”๊ฒฝ์šฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ 
    • ํ•ต์‹ฌ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด... ์žฌ๊ท€ํ•จ์ˆ˜์— ๊ฐ๊ฐ 3๊ณผ 2๋กœ ๋‚˜๋ˆˆ ๋ชซ์— ๋‚˜๋จธ์ง€๋ฅผ ๋”ํ•ด์„œ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

 

ํ•ต์‹ฌ์ฝ”๋“œ ํ’€์ด

์ฝ”๋“œ๋งŒ ๋ณด๋ฉด... ๋‚˜๋จธ์ง€๊ฐ’์„ ์™œ ๋”ํ•˜๋Š”์ง€ ์ดํ•ด ์•ˆ๋  ์ˆ˜ ์žˆ๋‹ค. ์ €๋„ ์ดํ•ดํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋Š”๋ฐ์š”... ๋‚˜๋จธ์ง€๊ฐ’์„ ๋”ํ•˜๋Š” ์ด์œ ๋Š” 7 ์ด๋‚˜ 11 ์ฒ˜๋Ÿผ 2์™€ 3์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด 1์„ 1๋ฒˆ ์ด์ƒ ๋นผ๊ณ  ์ง„ํ–‰์„ ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

  • 2๋กœ ๋‚˜๋ˆ„๋ ค๊ณ ํ•˜๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ 1
  • 3์œผ๋กœ ๋‚˜๋ˆ„๋ ค๊ณ ํ•˜๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ 1, 2

2์™€ 3์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ˆซ์ž์˜ ๊ทœ์น™์€ ์œ„์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ 2๊ฐ€์ง€ ๋ถ„๊ธฐ๋ฅผ ํƒ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

โ€ป ์˜ˆ์‹œ N=7 ์ธ ๊ฒฝ์šฐ 3๊ณผ 2๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ ๋ชจ๋‘ 1

ํ•ด๋‹น ๊ฒฝ์šฐ 3์ด๋“  7์ด๋“  -1์„ ํ•œ๋ฒˆ์”ฉ ์—ฐ์‚ฐํ•˜๊ณ  ์ง„ํ–‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€ 1์„ ๋”ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋œ๋‹ค.

 

 

โ€ป ์˜ˆ์‹œ N=11 ์ธ ๊ฒฝ์šฐ 3๊ณผ 2๋กœ ๋‚˜๋ˆด์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ ๊ฐ๊ฐ 2์™€ 1

ํ•ด๋‹น ๊ฒฝ์šฐ๋Š” ๋‘๊ฐ€์ง€ ๋ฃจํŠธ๋กœ ๋‚˜๋ˆ ์„œ ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  •  -1์„ ๋‘๋ฒˆ ํ•ด์„œ 3์œผ๋กœ ๋‚˜๋ˆ„๋ ค๋Š” ๋ฃจํŠธ
  • -1์„ ํ•œ๋ฒˆ ํ•ด์„œ 2๋กœ ๋‚˜๋ˆ„๋ ค๋Š” ๋ฃจํŠธ

๊ทธ๋ฆผ์œผ๋กœ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

11์—์„œ 9๋กœ ๊ฐ€์„œ 3์„ ๋‚˜๋ˆ„๋Š” ๋ฃจํŠธ๋กœ... 2๋ฒˆ์˜ -1 ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€์ธ 2๋ฅผ ๋”ํ•˜๊ณ 

11์—์„œ 10์œผ๋กœ ๊ฐ€์„œ 2๋กœ ๋‚˜๋ˆ„๋Š” ๋ฃจํŠธ๋กœ... 1๋ฒˆ์˜ -1 ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋จธ์ง€์ธ 1์„ ๋”ํ•˜๋Š” ์›๋ฆฌ์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€