[백트래킹] N과M(1)

2021. 7. 18. 14:08백준

 

 

15649번: N과 M (1)

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

www.acmicpc.net

1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 = NpM 이니까

 

파이썬에 내장된 순열과 조합 구현 가능한 라이브러리가 있더라;; 너무 편해...

 

from itertools import permutations as pm
N, M = map(int, (input()).split())
for i in pm(list(map(lambda x: x + 1, range(N))), M):
    print(*i)
    
    
    
'''
def get_result_recursive(pre: list, result: list):
    if len(result) == M:
        return print(" ".join(map(str,result)))
    else:
        for i in range(len(pre)):
            get_result_recursive([*pre[:i], *pre[i+1:]], [*result, pre[i]])


get_result_permutation()
'''

뭔가 너무 날로 먹는 것 같고 itertools 못 쓰는 케이스를 생각해서... 재귀로 푸는 케이스도 추가해봤다.

 

이번에 python에 있는 asterisk (*) 사용법을 알게 되었는데 신기했다.

 

js에 있는 ...rest 문법이랑 좀 비슷하게도 쓸 수 있었다. 역시 언어는 각 언어별 특징이 있다 뿐이지 대동소이 한 것 같다.