백준/문제풀이_python

15651 N과M(3) _python

휴대용치즈 2022. 10. 17. 03:34

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

 

15651번: N과 M (3)

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

www.acmicpc.net

12개의 비슷한 문제가 있는 문제 (1)~(12)

 

 

문제 접근

백트래킹

문제를 읽어보면 끝자리를 계속 바꿔나가니 스택으로 접근하기 가장 알맞아보인다.

스택으로 접근하는데 모든경우를 탐색한다는 것은 dfs를 사용하면 쉽게 풀린다.

N과M(1)과 다른점은 방문했는지 체크를 안해도 된다.

 

 

 

코드

import sys
input = sys.stdin.readline

"""

"""

N, M = map(int,input().split())
arr = []

def dfs():
    if len(arr)==M:
        print(*arr)
        return
    for i in range(1,N+1):
        arr.append(i)
        dfs()
        arr.pop()

dfs()