본문 바로가기
Algorithm

[Brute Force] 백준 15666 N과 M (12) - 파이썬(Python)

by jangThang 2022. 4. 4.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    15666번: N과 M (12)

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     주어진 수열에서 M개를 뽑는 중복 조합을 구하는 문제입니다. 단, 수열에는 같은 숫자가 들어갈 수 있으며, 중복되는 수열을 여러 번 출력해서는 안됩니다.

     

    2022.04.03 - [Algorithm] - [Brute Force] 백준 15657 N과 M (8) - 파이썬(Python)

     주어진 수열에서 M개의 중복조합을 구하는 N과 M (8) 문제와 유사합니다. 다만, 이번 문제에서는 수열에 동일한 숫자가 들어있을 수 있습니다. 단순히 itertools.combinations_with_replacement() 함수를 사용하면, 동일한 중복조합이 여러 번 나올 수 있습니다.

     

    입력)
    3 1
    4 4 2

    출력)
    2
    4 (첫 번째 4)
    4 (두 번째 4)

     따라서, set 자료형을 이용해서 중복되는 수열의 값을 제거해야 합니다.

     

     

     

    3. 코드

    from itertools import combinations_with_replacement
    
    N, M = map(int, input().split())
    numlist = set(map(int, input().split()))
    case = combinations_with_replacement(sorted(numlist), M)
    
    for i in case:
        for j in i:
            print(j, end=" ")
        print()

     set으로 중복되는 값을 제거한 후에, 중복조합을 구해줍니다.

     

    itertools.combinations_with_replacement(lst, n): lst에서 중복을 허용해서 n개를 뽑을 조합​

     

    star가 되고나서 Tistory

    반응형

    댓글