[BOJ]#14631 Pythonの作成
質問する
https://www.acmicpc.net/problem/1463
整数Xに使用できる演算は3種類あります.1. X가 3으로 나누어 떨어지면, 3으로 나눈다.
2. X가 2로 나누어 떨어지면, 2로 나눈다.
3. 1을 뺀다.
整数Nが与えられると、上記3つの演算を適宜用いて1が作成される.使用演算回数の最大値を出力してください.
入力
第1の行は、1以上、106以下の整数Nを与える.
しゅつりょく
1行目の演算回数の最大値を出力します.
アイデア
ダイナミックプログラミングの使用
ex)n=6の場合、dp[6]は最小の場合を求める.
まず、保存先に1を減算した場合.
2に分割し、3に分割する場合は、3に分割する場合に比べて小数を選択します.1. 1을 빼는 경우
=> dp[5]과 '6에서 1을 뺀 경우'인 1을 더한다
=> dp[6]=dp[5]+1
2. 2로 나누는 경우
=> dp[3]과 '6을 2로 나눈 경우'인 1을 더한다.
=> dp[6]=dp[3]+1
3. 3으로 나누는 경우
=> dp[2]와 '6을 3으로나눈 경우'인 1을 더한다.
=> dp[6]=dp[2]+1
1,2,3を比較し,最小の数字をdp[n]に格納して出力する.
マイコード(Python) num=int(input())
dp=[0]*(num+1) #dp[1]부터 사용하므로 num+1로 만들어야 함
for i in range(2,num+1):
dp[i]=dp[i-1]+1 #1을 뺀 경우를 저장함
if(i%2==0):
dp[i]=min(dp[i],dp[i//2]+1) #2로 나눠지면 비교해서 더 작은 수를 선택
if(i%3==0):
dp[i]=min(dp[i],dp[i//3]+1) #3으로 나눠지면 비교해서 더 작은 수를 선택
print(dp[num]) #마지막 결과 출력
注意:https://www.youtube.com/watch?v=5Lu34WIx2Us&t=2346s
Reference
この問題について([BOJ]#14631 Pythonの作成), 我々は、より多くの情報をここで見つけました
https://velog.io/@guswl8280/BOJ1463-1로-만들기-Python
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
1. X가 3으로 나누어 떨어지면, 3으로 나눈다.
2. X가 2로 나누어 떨어지면, 2로 나눈다.
3. 1을 뺀다.
第1の行は、1以上、106以下の整数Nを与える.
しゅつりょく
1行目の演算回数の最大値を出力します.
アイデア
ダイナミックプログラミングの使用
ex)n=6の場合、dp[6]は最小の場合を求める.
まず、保存先に1を減算した場合.
2に分割し、3に分割する場合は、3に分割する場合に比べて小数を選択します.1. 1을 빼는 경우
=> dp[5]과 '6에서 1을 뺀 경우'인 1을 더한다
=> dp[6]=dp[5]+1
2. 2로 나누는 경우
=> dp[3]과 '6을 2로 나눈 경우'인 1을 더한다.
=> dp[6]=dp[3]+1
3. 3으로 나누는 경우
=> dp[2]와 '6을 3으로나눈 경우'인 1을 더한다.
=> dp[6]=dp[2]+1
1,2,3を比較し,最小の数字をdp[n]に格納して出力する.
マイコード(Python) num=int(input())
dp=[0]*(num+1) #dp[1]부터 사용하므로 num+1로 만들어야 함
for i in range(2,num+1):
dp[i]=dp[i-1]+1 #1을 뺀 경우를 저장함
if(i%2==0):
dp[i]=min(dp[i],dp[i//2]+1) #2로 나눠지면 비교해서 더 작은 수를 선택
if(i%3==0):
dp[i]=min(dp[i],dp[i//3]+1) #3으로 나눠지면 비교해서 더 작은 수를 선택
print(dp[num]) #마지막 결과 출력
注意:https://www.youtube.com/watch?v=5Lu34WIx2Us&t=2346s
Reference
この問題について([BOJ]#14631 Pythonの作成), 我々は、より多くの情報をここで見つけました
https://velog.io/@guswl8280/BOJ1463-1로-만들기-Python
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
ダイナミックプログラミングの使用
ex)n=6の場合、dp[6]は最小の場合を求める.
まず、保存先に1を減算した場合.
2に分割し、3に分割する場合は、3に分割する場合に比べて小数を選択します.
1. 1을 빼는 경우
=> dp[5]과 '6에서 1을 뺀 경우'인 1을 더한다
=> dp[6]=dp[5]+1
2. 2로 나누는 경우
=> dp[3]과 '6을 2로 나눈 경우'인 1을 더한다.
=> dp[6]=dp[3]+1
3. 3으로 나누는 경우
=> dp[2]와 '6을 3으로나눈 경우'인 1을 더한다.
=> dp[6]=dp[2]+1
1,2,3を比較し,最小の数字をdp[n]に格納して出力する.マイコード(Python) num=int(input())
dp=[0]*(num+1) #dp[1]부터 사용하므로 num+1로 만들어야 함
for i in range(2,num+1):
dp[i]=dp[i-1]+1 #1을 뺀 경우를 저장함
if(i%2==0):
dp[i]=min(dp[i],dp[i//2]+1) #2로 나눠지면 비교해서 더 작은 수를 선택
if(i%3==0):
dp[i]=min(dp[i],dp[i//3]+1) #3으로 나눠지면 비교해서 더 작은 수를 선택
print(dp[num]) #마지막 결과 출력
注意:https://www.youtube.com/watch?v=5Lu34WIx2Us&t=2346s
Reference
この問題について([BOJ]#14631 Pythonの作成), 我々は、より多くの情報をここで見つけました
https://velog.io/@guswl8280/BOJ1463-1로-만들기-Python
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
num=int(input())
dp=[0]*(num+1) #dp[1]부터 사용하므로 num+1로 만들어야 함
for i in range(2,num+1):
dp[i]=dp[i-1]+1 #1을 뺀 경우를 저장함
if(i%2==0):
dp[i]=min(dp[i],dp[i//2]+1) #2로 나눠지면 비교해서 더 작은 수를 선택
if(i%3==0):
dp[i]=min(dp[i],dp[i//3]+1) #3으로 나눠지면 비교해서 더 작은 수를 선택
print(dp[num]) #마지막 결과 출력
Reference
この問題について([BOJ]#14631 Pythonの作成), 我々は、より多くの情報をここで見つけました https://velog.io/@guswl8280/BOJ1463-1로-만들기-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol