BOJ(백준) 15651번 N과 M (3) 파이썬

2021. 3. 22. 22:51개인 공부 공간/Algorithm

 

15651번: N과 M (3)

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

www.acmicpc.net


코드

import sys
r=sys.stdin.readline
N,M=map(int,r().split())
l=[i+1 for i in range(N)]
res=[]

def dfs(cnt):
    if cnt==M:
        print(*res)
        return

    for i in range(N):
        res.append(l[i])
        dfs(cnt+1)
        res.pop()

dfs(0)

 

해설

이 문제의 해결 방식 또한 N과 M (1) 문제 풀이와 매우 유사하다. 다만 이 문제에서는 중복을 허용하여 수를 고를 수 있기 때문에 check 와 같은 방문 여부를 확인할 필요가 없다. 단순히 dfs(cnt) 를 재귀적으로 호출해주며 수열의 길이가 M 이 되는 경우에 출력하도록 하였다.

 

결과

N과M3결과.PNG

출처: https://privatedevelopnote.tistory.com/81 [개인노트]