본문 바로가기
Algorithm

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

by jangThang 2022. 4. 10.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    15664번: N과 M (10)

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     주어진 수열에서 M개를 뽑는 조합을 구하는 문제입니다. 단, 각 조합은 오름차순으로 출력되어야 합니다.

     

    itertools.combinations(lst, n): lst에서 n개를 뽑는 조합

     itertools 라이브러리의 combinations 함수를 이용하면 쉽게 구할 수 있습니다.

     

     

     

    3. 코드

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

     N과 M 1~9까지에 비해 10은 조금 복잡합니다. 먼저 (9, 1)이 아니라, (1, 9)로 조합을 구하기 위해서 수열을 오름차순으로 정렬해서 인수로 대입합니다. 그 다음, 중복된 조합을 set으로 제거합니다.

     중복된 조합을 제거 후에 다시 오름차순으로 정렬해서 출력합니다. 이건 정렬을 2번이나 해야해서, 효율이 많이 떨어지긴 하네요.

     

    star가 되고나서 Tistory

    반응형

    댓글