728x90
https://www.acmicpc.net/problem/1463
문제 요약 :
- 3으로 나누어 떨어지면 3으로 나눈다.
- 2로 나누어 떨어지면 2로 나눈다.
- 1을 뺀다.
이 세가지 연산을 사용하여 정수X(1이상 10^6이하)를 1로 만드는 최소한의 횟수
풀이 )
1000000 이하면 dp를 1000001개 만들어줘야하는데 그대로 1000000개만 만들어서 IndexError가 떴었다.
실수를 줄이자..
문제에서 주어진 힌트를 보면 10의 경우10 → 9 → 3 → 1 로 3번 만에 만들 수 있다.
dp와 min을 통해 풀 수 있는 문제
dp = [0 for _ in range(1000001)]
dp[2] = 1
dp[3] = 1
N = int(input())
if N > 3 :
for n in range(4, N+1):
dp[n] = min(n,dp[n-1]+1)
if n % 3 == 0:
dp[n] = min(dp[n],dp[n//3]+1)
if n % 2 == 0:
dp[n] = min(dp[n], dp[n//2]+1)
print(dp[N])
728x90
'코테 공부 🔥' 카테고리의 다른 글
[백준/파이썬] 11000 : 강의실 배정 (0) | 2023.03.20 |
---|---|
[백준/파이썬] 1655 : 가운데를 말해요 (0) | 2023.02.27 |
[백준/파이썬] 9205 : 맥주마시면서 걸어가기 (0) | 2023.02.27 |
[프로그래머스/파이썬] 디펜스 게임 (0) | 2023.01.27 |
[프로그래머스/파이썬] 기사단원의 무기 (0) | 2023.01.16 |
댓글