알고리즘

(파이썬) 백준 알고리즘 - 15650번

joy_lee 2021. 8. 31. 17:49

N과 M (2)

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

 

15650번: N과 M (2)

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

www.acmicpc.net

15649번을 풀 때 찾아봤던 재귀함수를 떠올리며 코드를 작성해봤다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
N, M = list(map(int,input().split()))
 
numbers = []
 
def add_number(num):
    if len(numbers) == M:
        print(' '.join(map(str, numbers)))
        return
        
    for i in range(num+1, N+1):
        numbers.append(i)
        add_number(i)
        numbers.pop()
 
add_number(0)
cs

15649번은 같은 숫자들로 구성된 수열이어도 순서가 다르면 다른것으로 처리했는데 15650번 문제는 수열이 오름차순이어야 하기 때문에 출력되는 수열들의 수가 많이 줄었다.

오름차순으로 수열을 구성해야 하기 때문에 함수에 입력받은 num 이상의 수들을 numbers에 저장하도록 만들고,

수열의 길이가 M과 같으면 화면에 출력하도록 했다.