문제 링크
풀이
import sys
import copy
n, m = map(int, sys.stdin.readline().split())
def f(nums, m, seq=[]):
if len(seq) == m: print(" ".join(map(str, seq)))
for i in nums:
temp_nums = copy.copy(nums)
temp_nums.remove(i)
temp_seq = copy.copy(seq) + [i]
f(temp_nums, m, temp_seq)
f([x for x in range(1, n+1)], m)
재귀함수를 만들어서 m 개를 뽑을 때까지 계속해서 반복문을 돌린 후 뽑은 수들을 출력하도록 하였다.
import sys
import itertools
n, m = map(int, sys.stdin.readline().split())
print("\n".join(map(" ".join, itertools.permutations([str(x) for x in range(1, n+1)], m))))
파이썬의 itertools 모듈의 permutations를 사용하면 손쉽게 문제를 해결할 수 있다.
itertools.permutations(p[, r])는 p의 요소들 중에서 중복되지 않게 r개를 추출하여 튜플로 저장한 이터레이터를 반환한다. r을 생략하면 p의 요소의 개수만큼 추출한다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 1874] 스택 수열 with Python (0) | 2021.04.28 |
---|---|
[백준 1620] 나는야 포켓몬 마스터 이다솜 with Node.js (0) | 2021.04.27 |
[백준 1120] 문자열 with Node.js (0) | 2021.04.26 |
[백준 9461] 파도반 수열 with Python (0) | 2021.04.26 |
[백준 18258] 큐 2 with Node.js (0) | 2021.04.25 |