Pythonアルゴリズム128回|[標準15650回]N+M(2)
4683 ワード
128. N+M(2)
質問する
自然数NとMが与えられた場合、以下の条件を満たすすべての長さMの数列を解くプログラムを作成します.
1からNまで自然数の中でM個の数列を繰り返し選択しない
選択した数の列は昇順に並べます.
入力
第1行は自然数NとMを与える.(1 ≤ M ≤ N ≤ 8)
しゅつりょく
各行に問題条件を満たす数列を出力します.重複する数列は複数回出力できません.各数列はスペースで区切らなければなりません.
数列は予め増加した順序で出力しなければならない.
入力例1
3 1
サンプル出力1
1
2
3
入力例2
4 2
サンプル出力2
1 2
1 3
1 4
2 3
2 4
3 4
入力例3
4 4
サンプル出力3
1 2 3 4
1)どのような戦略(アルゴリズム)で解決しますか.
2)符号化説明
『私の答え』
ソース:ソース
『学んだこと』
質問する
自然数NとMが与えられた場合、以下の条件を満たすすべての長さMの数列を解くプログラムを作成します.
1からNまで自然数の中でM個の数列を繰り返し選択しない
選択した数の列は昇順に並べます.
入力
第1行は自然数NとMを与える.(1 ≤ M ≤ N ≤ 8)
しゅつりょく
各行に問題条件を満たす数列を出力します.重複する数列は複数回出力できません.各数列はスペースで区切らなければなりません.
数列は予め増加した順序で出力しなければならない.
入力例1
3 1
サンプル出力1
1
2
3
入力例2
4 2
サンプル出力2
1 2
1 3
1 4
2 3
2 4
3 4
入力例3
4 4
サンプル出力3
1 2 3 4
1)どのような戦略(アルゴリズム)で解決しますか.
2)符号化説明
『私の答え』
def nm(N,M):
if N==m :
for i in item:
print(i, end=" ")
print()
else :
for i in range(M,n+1):
if chk[i] == 0 :
item.append(i)
chk[i]=1
nm(N+1,i+1)
chk[i]=0
item.pop()
if __name__=="__main__":
n,m=map(int,input().split())
chk=[0]*(n+1) #체크용, 사용 여부
item=[]
nm(0,1)#n은 뽑을 갯수, m은 이미 뽑은 건 지나치기
<他人の解答or私の誤答、問題点>ソース:ソース
『反省点』『学んだこと』
Reference
この問題について(Pythonアルゴリズム128回|[標準15650回]N+M(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@myway00/파이썬-알고리즘-128번-백준-번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol