CodingTest/Baekjun Online Judge
[ BOJ / 파이썬 ] 15656 N과M(7)
EEOOOO
2022. 8. 29. 21:39
| 제출 1 |
# 백트래킹
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
nums = sorted(list(map(int, input().split())))
keep = []
def recur(x):
if x == M:
print(*keep)
return
for i in range(len(nums)):
keep.append(nums[i])
recur(x+1)
keep.pop()
recur(0)
: 백트래킹 이용한 풀이
: nums의 모든 값마다 nums의 처음부터 끝까지 짝 지어줘야하기에 for문의 인덱스 범위를 전체로 설정했다.
: 중복을 허용하며 본인과도 겹쳐도 되기에 중복 여부를 확인하는 과정이 없다.
| 제출 2 |
# 중복 순열 product 사용
import sys
input = sys.stdin.readline
from itertools import product
N, M = map(int, input().split())
nums = sorted(list(map(int, input().split())))
for item in product(nums, repeat=M):
print(*item)
: 중복 순열 메서드 product 사용
: 주의할 점, product의 두 번째 인자는 repeat="고를숫자" 로 해줘야한다. 그냥 int 값 주면 안 된다.