n=int(input())
d=[0]*1000001
for i in range(2, n+1):
d[i] = d[i-1] + 1
if i%2==0:
d[i]=min(d[i], d[i//2]+1)
if i%3==0:
d[i]=min(d[i], d[i//3]+1)
print(d[n])
<코드설명>
먼저 n을 입력받아주었다.
for문을 이용하여 2부터 n까지 반복시켜주었다.
1을 빼줬을 때 횟수 추가를 하기 위해 d[i]=d[i-1]+1을 해주었다.
i가 2로 나눠 떨어질 경우, 원래 수인 d[i]와 d[i//2]+1의 값을 비교하여 더 작은 값을 d에 넣어주었다. +1은 횟수를 추가해주기 위함이다.
i가 3으로 나눠 떨어질 경우, 원래 수인 d[i]와 d[i//3]+1의 값을 비교하여 더 작은 값을 d에 넣어주었다. 마찬가지로 +1은 횟수를 추가해주기 위함이다.
이렇게 구한 d[n]을 출력해주었다.
<실행결과>
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 2776 암기왕 (0) | 2022.10.09 |
---|---|
[BOJ] 9322 철벽 보안 알고리즘 (0) | 2022.10.09 |
[BOJ] 2910 빈도 정렬 (0) | 2022.10.02 |
[BOJ] 25325 학생 인기도 측정 (0) | 2022.10.02 |
[BOJ] 1912 연속합 (0) | 2022.09.25 |