본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 15656 N과M(7)

|  제출 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 값 주면 안 된다.