1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
n=int(input())
a=0
while n!=1:
if n%3==0:
n/=3
a+=1
elif n%2==0:
n/=2
a+=1
else:
n-=1
a+=1
print(a)
(틀렸습니다.)
arr=[[1]]
a=0
n=int(input())
for i in range(n):
for j in range(len(arr[i])):
arr_2=[arr[i][j]+1, arr[i][j]*2, arr[i][j]*3]
arr.append(arr_2)
if n in arr[-1]:
break
if n in arr[-1]:
break
k=len(arr)
a=1
b=0
while True:
a+=3**b
b+=1
if k<=a:
break
if n==1:
print(0)
else:
print(b)
(메모리 초과)
arr=[1]
n=int(input())
k=0
for i in arr:
if i+1 not in arr:
arr.append(i+1)
if i*2 not in arr:
arr.append(i*2)
if i*3 not in arr:
arr.append(i*3)
if n in arr:
break
if 3**k in arr:
k+=1
if n==1:
print(0)
elif n==2 or n==3:
print(1)
elif n==4 or n==6:
print(2)
else:
print(k)
(시간 초과)
n=int(input())
arr=[[]for _ in range(n)]
arr[0].append(n)
for i in range(1,n):
for j in arr[i-1]:
arr[i].append(j-1)
if j%2==0:
arr[i].append(j//2)
if j%3==0:
arr[i].append(j//3)
if 1 in arr[i]:
break
print(i)
(런타임 에러)
n=int(input())
arr=[[]for _ in range(n)]
arr[0].append(n)
a=0
for i in range(1,n):
for j in arr[i-1]:
arr[i].append(j-1)
if j%2==0:
arr[i].append(j//2)
if j%3==0:
arr[i].append(j//3)
a+=1
if 1 in arr[i]:
break
print(a)
(맞은 풀이)
n=int(input())
arr=[0 for _ in range(n+1)]
for i in range(2, n+1):
arr[i]=arr[i-1]+1
if i%2==0:
arr[i]=min(arr[i], arr[i//2]+1)
if i%3==0:
arr[i]=min(arr[i], arr[i//3]+1)
print(arr[n])
(수정)
'알고리즘 PS > DP' 카테고리의 다른 글
백준 #9095 1, 2, 3 더하기 (1) | 2023.11.09 |
---|---|
백준 #2839 설탕배달 (1) | 2023.10.02 |
백준 #9625 BABBA 파이썬 (0) | 2023.09.15 |
백준 #26529 Bunnies (0) | 2023.09.04 |
다이나믹 프로그래밍이란? (0) | 2023.09.03 |