문제
https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
주요 아이디어
1~n까지의 dp list를 만들고, 해당 숫자를 만들기 위해 필요한 최소 연산 횟수를 구하면 된다.
코드 구현 (Python 3)
더보기
n = int(input())
dp_list = [0] * (n+1)
# 1로 만들기니까 2 이상부터 시작
for i in range(2, n+1):
# 기본적으로 할 수 있는 연산 = 이전 연산횟수에서 빼기 한번이므로 +1
dp_list[i] = dp_list[i-1] + 1
if i%2 == 0:
# 이전 연산 (i*2) 에서 나누기 한번이므로 +1
dp_list[i] = min(dp_list[i], dp_list[i//2]+1)
if i%3==0:
# 이전 연산 (i*3) 에서 나누기 한번이므로 +1
dp_list[i] = min(dp_list[i], dp_list[i//3]+1)
print(dp_list[n])
제출 결과
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 9466. 텀 프로젝트 (0) | 2024.04.24 |
---|---|
[BOJ] 12852. 1로 만들기 2 (0) | 2024.04.24 |
[BOJ] 12865. 평범한 배낭 (1) | 2024.04.21 |
[BOJ] 1026. 보물 (0) | 2024.04.21 |
[BOJ] 14501. 퇴사 (1) | 2024.04.06 |