[백준][Python] 15651번 N과 M(3)

승민·2022년 1월 4일
0

Algorithm

목록 보기
6/19

💡 요약 노트

해당 문제는 15650번과 같이 라이브러리를 불러와서 풀지 않고 dfs를 이용해 정석적으로 해결하였다.
핵심 원리는 리스트인 arr에 있다. 빈 arr에 dfs를 수행하면 입력받은 M의 크기와 arr의 길이가 같아질 때까지 append가 일어난다. 그 뒤 M의 크기와 arr의 길이가 같아지면 arr을 출력하고 pop을 한 뒤 다음 인덱스로 넘어간다. 즉 밑의 이미지처럼 맨 왼쪽 끝까지 탐색 후 한 단계 퇴각 후 다음 원소를 끝까지 탐색하는 형태이다.

import sys
input = sys.stdin.readline
# N과 M을 입력받음
N, M = map(int, input().split())
arr=[]
def dfs():
    # 만약 arr의 길이가 M과 같아지면 arr을 한줄로 출력
    if len(arr)==M:
        print(' '.join(map(str, arr)))
        return
    # 만약 arr의 길이가 M과 같지 않으면 arr에 i를 추가하고 dfs 수행
    # dfs가 종료되면, 즉 arr의 길이가 M이 되어 멈추고 나면 pop을 수행
    # pop을 수행함으로써 다음에 출력해야할 숫자로 넘어감(dfs)
    else:
        for i in range(1, N+1):
            arr.append(i)
            dfs()
            arr.pop()
dfs()
profile
안녕하세요 승민입니다

0개의 댓글