개발바닥

BOJ_1463 [ 1로 만들기 ] [ 파이썬 ] 본문

[ Algorithm ]/[ PYTHON ]

BOJ_1463 [ 1로 만들기 ] [ 파이썬 ]

라이언 2020. 5. 26. 09:56
반응형

문제

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

 

1463번: 1로 만들기

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

www.acmicpc.net

문제 해결 방법

top -bottom 방식으로

현재 숫자에서 3가지 연산을 했을 때 인덱스 값이 0 이라면 현재숫자까지 이동한 횟수 +1 을 해서 값을 갱신해준다.

dp[연산 후 값] = dp[연산 전 값] +1

 

소스 코드 보기

https://github.com/jokerKwu/BOJ_Algorithm/blob/master/python/BOJ_1463.py

 

jokerKwu/BOJ_Algorithm

Contribute to jokerKwu/BOJ_Algorithm development by creating an account on GitHub.

github.com

import sys
n = int(sys.stdin.readline())
dp = [0 for _ in range(n+1)]
arr = [n]
while arr or dp[0] != 0:
    c_n = arr.pop()
    if c_n == 1:
        break
    if c_n % 2 == 0 and dp[c_n//2] == 0:
        dp[c_n//2] = dp[c_n] + 1
        arr = [c_n // 2] + arr
    if c_n % 3 == 0 and dp[c_n//3] == 0:
        dp[c_n//3] = dp[c_n] + 1
        arr = [c_n // 3] + arr
    if dp[c_n - 1] == 0:
        dp[c_n - 1] = dp[c_n] + 1
        arr = [c_n-1] + arr
print(dp[1])
반응형
Comments