알고리즘/백준
[백준 15650][파이썬] N과 M (2)
2twix2
2022. 2. 14. 02:55
https://www.acmicpc.net/problem/15650
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
이전 문제인 (1)과 유사하지만 개인적으로 이게 더 쉬운 것 같다.
오름차순 정렬이라서 다음 수가 전의 수보다 크기만 하면 절대로 중복될 일이 없다. 따라서, 어떤 숫자가 sequence 안에 있는지 따로 확인해 줄 필요가 없다.
그래서 for문 범위도 헷갈리지 않게 1부터 N까지로 바꿨다. 그런데 코드를 보면 1이 들어갈 자리에 prev_num + 1이 들어가 있는 걸 볼 수 있는데 이건 오름차순 정렬을 위해 for문 범위를 sequence에 넣은 바로 전 숫자보다 큰 수부터 N까지로 한 것이다.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
sequence = []
def dfs(prev_num):
if len(sequence) == M:
print(' '.join(map(str, sequence)))
return
for i in range(prev_num + 1, N + 1):
sequence.append(i)
dfs(i)
sequence.pop()
dfs(0)