공부하기/백준

[Python] 백준 풀기 15650 - N과 M (2)

XEV 2022. 9. 19. 15:41

파이썬 백준 15650번

실버3

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

 

15650번: N과 M (2)

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

www.acmicpc.net

 

 

 

문제 보기

 
 
 

문제 풀기

15649번 문제에서 중복 수열을 제거하기 위해

원소의 자리가 올라갈때마다 시작 포인트를 지정하여 수열의 아랫자리 중복을 피한다.

이를 위해 fnDFS 시작때 숫자 1을 지정.

함수안 start 변수를 지정해주고

for문 시작을 start 변수로

재귀함수를 호출할때에는 i 값을 +1 증가시킨다.

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline

N, M = map(int, inputdata().split())

num_sequence = []

def fnDFS(start):
    if len(num_sequence) == M:
        print(*num_sequence)
        
    for i in range(start, N + 1):
        if i not in num_sequence:
            num_sequence.append(i)
            fnDFS(i + 1)
            num_sequence.pop()
            
fnDFS(1)



# 4 2

# 1 2
# 1 3
# 1 4
# 2 3
# 2 4
# 3 4