https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
재귀를 썻는데 -1을 해주는 연산때문에 재귀가 100000개이상으로 늘어난다. 파이썬에서 재귀는 1000개까지 가능하다고하여 다시 썻다.
dy=[0] * 1000001
import sys
n=int(sys.stdin.readline().rstrip())
def filter(n, b=0):
if dy[n] != 0:
return dy[n]
if n ==1:
return 0
else:
a=[]
if n%3==0:
a.append(filter(n // 3, 0) + 1)
if n%2==0:
a.append(filter(n // 2, 0) + 1)
if b<6:
a.append(filter(n-1, b+1) + 1)
dy[n] = min(a)
return dy[n]
return n
print(filter(n))
b는 n일때 -1연산을 n-b까지만 해주는 장치이다.
다이나믹 프로그래밍으로 1부터 1000000까지 연산을 하는 풀이방법도 있던데 상상도 못했다. 아직 다이나믹프로그래밍은 많이 부족한 것 같다.
부족한 점
1. b를 찍었다. b를 처음엔 2로 줬는데 오류가 나서 b를 1씩 늘려준 결과 6에서 답이나왔다.
'코딩 > 백준' 카테고리의 다른 글
| 백준 9095 1,2,3 더하기(점화식x) (0) | 2023.03.03 |
|---|---|
| 백준 2953번 나는 요리사다 (배열) (0) | 2023.01.07 |