백준 15650

김가람·2023년 3월 31일
0

1. 문제

15650번

2. 풀이

  • 15649의 코드에서 아주 약간만 변형을 주면 풀 수 있다.
N,M = list(map(int,input().split()))

def nm_backtrack(n, m):
    
    result = [0] # 탐색한 경우의 수를 저장하는 상태공간 정의
    '''
    max 메서드를 사용하기 위해 맨 앞에 0을 추가한다.
    '''
    def backtrack(): # 상태공간을 DFS 방식으로 탐색
        if len(result) == m+1: # Depth가 tree 끝에 도달하면 값을 출력
        '''
        맨 앞에 0이 붙어 있으므로 입력받은 tree 최대 깊이보다 +1 만큼 증가 시킨다.
        '''
            print(' '.join(map(str,result[1:]))) # 맨 앞의 0을 자르고 표시하기 위해 1부터 indexing 한다.
            return # Depth가 tree 끝에 도달하면 재귀 종료

        for i in range(1,n+1): # 1부터 n까지 1씩 증가
            if i > max(result): # i가 상태 공간 내 값보다 클 때...
                result.append(i) # result에 추가한다.
                '''
                tree 가지를 재귀 형태로한번 더 뻗는다.
                위의 if문에 의해 Depth가 tree 끝에 왔다면
                출력하고 return 된다.
                '''
                backtrack()
                '''
                return되어 나온 tree의 가지 끝을 자른다.
                for 문에 의해 다음 i가 가지 끝에 나온다.
                '''
                result.pop()
                
    backtrack()

nm_backtrack(N, M)
profile
부캐:데이터 사이언티스트가 되고 싶은 반도체 공장 노예

0개의 댓글