본문 바로가기
코딩/백준

알고리즘 - Python / 백준 - 15663번 : N과 M (9)

반응형

15663번: N과 M (9) (acmicpc.net)

 

15663번: N과 M (9)

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

www.acmicpc.net

 


풀이

  • 중복이 가능한 N가지 수를 입력 받고 , 그 중 M개를 뽑아 순열을 만들고 사전순으로 출력하면 되는 문제이다.
  • 파이썬의 itertools 에서 permutations 을 import 하여 쉽게 순열을 구현 할 수 있다.
  • 중복을 허용해 N가지 수를 입력받지만 , 중복된 순열을 여러번 출력하면 안되기 떄문에 파이썬에서 리스트의 중복을 제거하는 가장 간단한 방법인 set을 활용해 중복을 제거하고 sort를 사용해 중복이 제거된 순열 리스트를 사전순으로 출력할 수 있도록 한다.

 

import sys
from itertools import permutations
n , m = map(int, sys.stdin.readline().split(" "))
stack = list(map(int , sys.stdin.readline().split(" ")))
ans = list(permutations(stack, m))
ans = list(set(ans))
ans.sort()
if m == 1:
    for t in range(0, len(ans)):
        s = list(ans[t])
        print(s[0])
else:
    for t in range(0,len(ans)):
        s = list(ans[t])
        for u in range(0,len(s)-1):
            print(s[u],end=" ")
        print(s[len(s)-1])

 

 

 

 

반응형