파이썬
[백준 15649] N과M1 with 파이썬
홍시홍
2020. 9. 16. 00:47
요구사항
중복을 허용하지 않고 n개중 m개를 뽑아서 출력하기
참고
다양한 문제 풀이법이 존재한다
1. 재귀를 통해 출력한다
-> 첫번째 부터 마지막 까지 방문하면서 정답 배열에 넣어준다
-> m만큼의 길이 만큼 왔으면 출력한다
2. permutation 모듈을 이용한다
-> n개 중 m개를 뽑는데 순서가 상관있게 뽑는 것은 순열이다
-> permutation 뽑은 후 출력한다
두 풀이 다 재밋으나 파이썬 스럽게 푸는 것은 2번째 풀이이다
풀이1
import sys
n,m = map(int,input().split())
visit =[0]*10
my_vec=[]
#dfs를 이용하여 n개중 m개(cnt) 뽑으면 출력한다
def Com(now, cnt):
if(cnt==m):
for i in my_vec:
print(i,end=' ')
print()
return
for i in range(1,n+1):
if(visit[i]==0):
visit[i]=1
my_vec.append(i)
Com(i,cnt+1)
my_vec.pop()
visit[i]=0
#첫 원소부터 dfs 시작
for i in range(1,n+1):
#방문 여부 표시
visit[i]=1
my_vec.append(i)
Com(i,1)
#종료
my_vec.pop()
visit[i]=0
풀이2
from itertools import permutations
n,m = map(int,input().split())
arr = list(range(1,n+1))
#permutation을 사용 arr중에서 m개 뽑기
k=list(permutations(arr,m))
#문자열로 변환 후 출력
for i in k:
print(' '.join(map(str,i)))