본문 바로가기
코딩테스트

백준(Baekjoon) 1463번 : 1로 만들기 with Python

by CleanCoder 2021. 1. 22.

 

백준에서 문제 보기 : https://www.acmicpc.net/problem/1463

 

1463번: 1로 만들기

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

www.acmicpc.net

 

난이도

실버 3

알고리즘

1) 0으로 리스트 초기화

2) 점화식 이용 

   f(x - 1) + 1

   f(x / 2) + 1

   f(x / 3) + 1

 최소값 구하기

 

해결 방안

문제에서 요구하는 사항은 'DP(Dynamic programming)'를 구현하여 해결하는 개념을 요구합니다.

 

import sys

input = sys.stdin.readline

N = int(input())

dp = [0 for _ in range(N+1)]

for i in range(1, N+1):
    if i == 1:
        dp[i] = 0
        continue
    dp[i] = dp[i - 1] + 1
    if i % 3 == 0 and dp[i // 3] + 1 < dp[i]:
        dp[i] = dp[i // 3] + 1
    if i % 2 == 0 and dp[i // 2] + 1 < dp[i]:
        dp[i] = dp[i // 2] + 1

print(dp[N])

 

출력

리스트를 쓰지 않고 구현했다가는 시간초과 나기 쉽상이다

 

댓글