하루살이 개발자

[BaekJoon 15650번] N과 M(2) (Python) 본문

코딩테스트

[BaekJoon 15650번] N과 M(2) (Python)

하루살이 2022. 3. 1. 18:50

N과 M(2) 문제입니다.

 

문제링크: https://www.acmicpc.net/problem/15650

 

15650번: N과 M (2)

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

www.acmicpc.net

풀이

백트래킹 N과 M(1) 문제에서 "오름차순"이라는 제약조건 추가됨

따라서 기존 배열에서의 최댓값과 새로 입력할 숫자의 크기 비교하여 해결했다.

 

Code

n, m = map(int, input().split())
result = [0] * (m+1)

def solve(depth):
    if depth == m+1:  # 탈출 조건
        for i in range(1, m+1):
            print(result[i], end=' ')
        print()
    else:
        for i in range(1,n+1):
            if max(result) < i:
                result[depth] = i  # 방문한 번호 입력
                solve(depth+1)  # 깊이 우선 탐색
                result[depth] = 0  # 방문 내용 제거
solve(1)