개발 연습장/백준 문제풀이

[파이썬, Python] 백준 15650: N과 M (2)

LooanCheong 2023. 4. 12. 11:51
반응형

문제

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

 

15650번: N과 M (2)

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

www.acmicpc.net

코드

n, m = map(int, input().split())

s = []

def dfs(start):
    if len(s) == m:
        print(' '.join(map(str,s)))
        return
    
    for i in range(start, n+1):
        if i not in s:
            s.append(i)
            dfs(i+1)
            s.pop()

dfs(1)

설명

https://looancheong.tistory.com/147

 

[파이썬, Python] 백준 15649: N과 M(1)

문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야

looancheong.tistory.com

이 문제와 굉장히 유사한 문제였다.

하지만, 중복되는 수가 빠져야 한다.
(1, 2) = (2, 1) 이기 때문이다.

따라서, 시작 지점을 정해주고 그 수보다 큰 수를 기준으로 dfs를 돌려주었다.

dfs(1)의 경우 1이 s에 들어가고, 2,3,4가 차례대로 들어간다.
dfs(2)의 경우 2가 s에 들어가고, 3,4 가 차례대로 들어간다.

이런 식으로 중복 출력을 제외하고 출력이 가능하다.

반응형