티스토리 뷰
풀이
기본적인 DP 문제이다. 작은 수의 계산 결과를 저장하면서 다음 문제를 해결할 때 이용하면 간편하게 문제를 해결할 수 있다.
입력과 출력을 한번 생각해보자.
입력이 1이라면 답은 0, 입력이 2라면 답은 1이다.
입력이 4라면 2로 한번 나눠서 2가 될 것이고 2를 1로 만드는 연산 횟수는 먼저 계산했듯 1이다.
입력이 16이 들어온 경우 만약 8을 1로 만드는 최소 횟수를 안다면 그것에 1만 더하면 된다.
입출력의 예시를 생각해보면, 작은 숫자를 1로 만드는 연산 횟수를 알고 있다면 더 큰 수일 때
이 문제를 푸는 핵심은 문제를 최대한 분해한 다음 가장 작은 수에서부터 그것을 1로 만드는 연산 횟수를 구하는 것이다.
소스코드에서 n%2, n%3을 더해주는 것은 해당 숫자로 나누어지지 않았을 때 1씩 빼는 경우를 더해주는 것이다.
Python3 Code
dp = {1:0, 2:1}
def find(n):
if n in dp:
return dp[n]
x = find(n//2) + n%2
y = find(n//3) + n%3
m = 1 + min(x, y)
dp[n] = m
return m
n = int(input())
print(find(n))
'Computer Science > Algorithm' 카테고리의 다른 글
[BOJ] 11053 - 가장 긴 증가하는 부분 수열 (0) | 2020.06.16 |
---|---|
[BOJ] 2193 - 이친수 (0) | 2020.06.14 |
[BOJ] 2156 - 포도주 시식 (0) | 2020.06.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 모델 시각화
- tensorflow
- RNN
- BOJ
- stft
- 6.006
- 시계열
- keras
- aws cli
- netron
- AWS
- nlp
- 인공지능 스피커 호출
- TF2.0
- Introduction to Algorithm
- nlp 트렌드
- MFCC
- MIT
- 오디오 전처리
- LSTM
- 핵심어 검출
- nlg
- lambda
- 알고리즘
- S3
- librosa
- boto3
- Tensorflow2.0
- wavenet
- 알고리즘 강의
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함