Stay Hungry Stay Foolish

BOJ 코딩테스트/Silver

BOJ 15651번 : N과 M (3) (Python/Silver 3)

dev스카이 2023. 5. 11. 18:18
 

15651번: N과 M (3)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net


설명

1 ~ N까지 자연수 중에서 M개를 고른 수열을 나열해서 출력하라는 문제이다.  또한 같은 수를 골라도 된다.

 

풀이

풀이는 간단하다. 1부터 N까지 수를 리스트에 다 담는다. 중복된 숫자도 들어가야 하니 중복순열을 사용한다. 

중복순열은 순열과는 약간 다르게, 같은 숫자를 중복해서 담을 수 있다. 

 

✎ itertools 라이브러리에서 product 함수를 import 한다.

☐ product(list, repeat = 뽑을 개수)

 

Solution

import sys 
input = sys.stdin.readline #입출력 향상

N, M = map(int, input().split())
list = []
for i in range(1, N+1):
    list.append(i) 
    
from itertools import product 
for i in product(set(list), repeat = M): #set을 쓰지 않으면 오류, 혹은 list(product(list)) 이렇게도 사용한다.
    for j in i:
        print(j, end = ' ')
    print(sep = '\n')

※ 알고리즘 분류를 보니 백트래킹으로도 풀 수 있는 문제인가 보다.