본문 바로가기

CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 15651 N과 M(3)

|  제출 1  |

# 백트래킹으로 구현
import sys
input = sys.stdin.readline

n,m = map(int, input().split())

group = []
def find():

  if len(group) == m:
    print(' '.join(list(map(str, group))))
    return

  for i in range(1, n+1):
      group.append(i)
      find()
      group.pop()

find()

: 우선 백트래킹 구현이다.

: N과M 시리즈로 푸는 중인데, 절대 안 잊겠다 싶다. 너무 좋다 이런 반복 훈련 

 

: 이번에는 중복 허용해서 출력하는 것이다. 아래 쪽에 백트래킹 구현 부분에서 새로운 값인 i를 넣을 때,

기존 그룹에 동일값이 있는지 체크하는 부분을 빼주기만 했다.

 

: 쉽게 구현이 가능해서 만족스럽다.

 

 

|  제출 2  |

 

# product 라이브러리 사용

import sys
input = sys.stdin.readline
from itertools import product
n,m = map(int, input().split())

result = product(range(1, n+1), repeat=m)
for r in result:
  print(' '.join(list(map(str, r))))

 

: 오히려 이 문제는 라이브러리의 사용이 버벅였다.

: product는 자주 사용하던 라이브러리가 아니어서 파라미터 구성 부분이 헷갈렸다. 

 

 

product 

: 중복 순열, 중복을 허용하여 m개 뽑기

: 순열이므로 순서 고려함

product( 반복 가능한 객체, repeat=뽑는 수)