#1463 1둜 λ§Œλ“€κΈ°πŸ€Έβ€β™€οΈ

sso0_zΒ·2023λ…„ 2μ›” 9일
0

λ°±μ€€

λͺ©λ‘ 보기
24/40

λ¬Έμ œπŸ“


결과😍


μ½”λ“œπŸ’»

x = int(input())

d = [0]*(x+1)

for i in range(2,x+1):
  d[i] = d[i-1] + 1
  if i%3==0:
    d[i] = min(d[i],d[i//3]+1)
  if i%2==0:
    d[i] = min(d[i],d[i//2]+1)

print(d[x])

ν’€μ΄πŸ’‘

  1. d에 κ³„μ‚°λœ 값을 μ €μž₯ν•΄λ‘”λ‹€. x+1이라고 ν•œ μ΄μœ λŠ” 1번째 μˆ˜λŠ” d[1]이 μ•„λ‹ˆκ³  d[2]이기 λ•Œλ¬Έμ— κ³„μ‚°ν•˜κΈ° νŽΈν•˜κ²Œ d[1]을 1번째인 κ²ƒμ²˜λŸΌ λ§Œλ“€μ–΄μ€€λ‹€.
  2. forλ¬Έμ—μ„œ 1을 λΉΌκ³  μ‹œμž‘ν•˜λŠ” 이유 : λ‹€μŒμ— 계산할 λ‚˜λˆ„κΈ°κ°€ 1을 λΊ€ 값보닀 μž‘κ±°λ‚˜ 큼에 따라 μ–΄μ°¨ν”Ό ꡐ체되기 λ•Œλ¬Έ
  3. if elif else문을 μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€. if만 μ‚¬μš©ν•΄μ•Ό μ„Έ 연산을 λ‹€ κ±°μΉ  수 μžˆλ‹€.
  4. minμ—μ„œ 1을 λ”ν•˜λŠ” 것은 dλŠ” κ²°κ³Όκ°€ μ•„λ‹Œ κ³„μ‚°ν•œ 횟수λ₯Ό μ €μž₯ν•˜λŠ” 것이기 λ•Œλ¬Έμ΄λ‹€. d[i]μ—λŠ” λ”ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” 이미 1을 λΊ„ λ•Œ 1을 더해쀀 이λ ₯이 있기 λ•Œλ¬Έμ΄λ‹€.

-dp λ¬Έμ œμ΄λ‹€.
동적 κ³„νšλ²•μ€ λ©”λͺ¨μ΄μ œμ΄μ…˜ 방법을 μ‚¬μš©ν•˜μ—¬ 쀑볡해 κ³„μ‚°λ˜λŠ” 값을 μ €μž₯ν•΄ νš¨μœ¨μ„ λ†’μ—¬μ€€λ‹€.

dp문제 μ’€ μ–΄λ €μš΄ 것 κ°™λ‹€...아직도 μ •ν™•νžˆ μ΄ν•΄λŠ” μ•ˆλ˜μ—ˆμ§€λ§Œ λͺ‡ 번 λ°˜λ³΅ν•˜λ‹€λ³΄λ‹ˆ μ²˜μŒλ³΄λ‹€λŠ” λ‚˜μ€ 것 같기두...계속 λ‹€μ‹œ 풀어봐야겠닀...

κ·Έλ¦¬λ””λ‘œ ν’€ 경우, 10은 10-5-4-2-1둜 ν’€κ²Œ λ˜λ―€λ‘œ λ°©λ²•μ˜ μˆ˜κ°€ 5κ°€ λœλ‹€.


μ°Έκ³ πŸ™

πŸ‘‰ [λ°±μ€€] 1463번: 1둜 λ§Œλ“€κΈ° - 파이썬

profile
μ±„μ†Œ

0개의 λŒ“κΈ€