Algorithm (PS)

[백준] 15666번: N과 M (12) Python - 조합,구현

minjiwoo 2023. 1. 1. 12:45
728x90

https://www.acmicpc.net/problem/15666

 

15666번: N과 M (12)

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

www.acmicpc.net

삼성 코딩테스트에서는 collections 라이브러리를 못쓰게 한다는 소식을 듣고 ~ 

n과 m을 풀어보았읍니다..
 비내림차순으로 순열을 구하는 알고리즘입니다

중복된 값을 출력하는 것을 방지하기 위해, 처음에 입력받는 숫자들을 set()으로 묶어서 중복된 숫자를 빼줍니다 

import sys

input = sys.stdin.readline
n, m = map(int, input().split())

data = sorted(list(set(map(int, input().split()))))

def solve(numbers):
    if len(numbers) == m:
        print(" ".join(map(str, numbers)))
        return
    for i in range(len(data)):
        if len(numbers) == 0 or numbers[-1] <= data[i]:
            numbers.append(data[i])
            solve(numbers)
            numbers.pop()

solve([])
728x90