반응형

   문제

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


n번째에서 이전단계는 3개로 나뉜다.

n-1번째의 최솟값 , 2로 나누어 진다면 n//2의 최솟값 , 3으로 나누어 진다면 n//3 의 최솟값

이 셋중  작은것을 골라 1을 더해주게 되면 n번째의 최솟값을 구할수 있다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
n=int(input())
result=[0 for _ in range(n+1)]
 
 
def make_one(n):
    if n==1:
        return
    result[2]=1
    if n==2:
        return
    result[3]=1
    if n==3:
        return
    for i in range(4,n+1):
        result[i] = result[i - 1+ 1
        if i%3==0:
            result[i]=min(result[i//3]+1,result[i])
        if i%2==0:
            result[i]=min(result[i//2]+1,result[i])
 
make_one(n)
print(result[n])

cs


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기