티스토리 뷰

알고리즘/BOJ

[BOJ-1463] 1로 만들기

개발하는 후딘 2020. 2. 27. 22:07
728x90
반응형

https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net


[풀이]

0: 1로 입력 숫자 n 인덱스의 혼동을 없애기 위해서 추가했다.

(, n=10일 때 1로 만드는데 최소연산 횟수를 DP[10]을 리턴 하기 위해서)

 

숫자 n1이 되기 위한 최소 연산 횟수를 구하려면

1: 연산할 필요없이 1이므로, 1로 만드는데 필요한 연산횟수는 0이다.

2: DP[2]= MIN( DP[2-1]+1, DP[2//2]+1)

3: DP[3]= MIN( DP[3-1]+1, DP[3//3]+1)

4: DP[4]= MIN( DP[4-1]+1, DP[4//2]+1)

5: DP[5]= DP[5-1]+1

6: DP[6]= MIN( DP[6-1]+1, DP[6//3]+1, DP[6//2]+1)

 


[코드 (.py)]

# -*- coding: utf-8 -*-
import sys

def main():
    n=int(sys.stdin.readline())
    dp=[0]*(n+1)
    for i in range(2,n+1):
        #제일적게 1로 만드는 방법을 찾는다.
        dp[i]= dp[i-1]+1
        if i%3==0: #3으로 나눠떨어지는 수인가?
            dp[i]=min(dp[i], dp[i//3]+1) 
        elif i%2==0: #2로 나눠떨어지는 수인가?
            dp[i]=min(dp[i], dp[i//2]+1)
    print(dp[n])

if __name__=='__main__':
    main()

[코드 (.java)]

728x90
반응형

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ-1520]내리막길  (0) 2020.03.01
[BOJ-11057] 오르막수  (0) 2020.02.29
[BOJ-2747] 피보나치 수  (0) 2020.02.27
[BOJ-1613] 역사  (0) 2020.02.27
[BOJ-1389] 케빈 베이컨의 6단계 법칙  (0) 2020.02.26
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 29 30 31
글 보관함