Algorithm

[백준 15649 | python] N과 M (1) (백트레킹)

삐롱K 2025. 6. 21. 03:23

 

Q1) 문제를 어떻게 이해했나요?
A1) 1부터 N까지의 수 중에서 M개를 중복 없이 뽑아서 만든 수열을 모두 출력해야 해요.
Q2) 문제를 어떻게 풀 예정인가요?
A2)
DFS(백트래킹)을 사용해 수열을 하나씩 만들어가며 탐색합니다.
이미 선택한 숫자는 visited 배열로 중복 선택을 막습니다.
수열의 길이가 M에 도달하면 출력합니다.
사전 순 출력을 위해 숫자 1부터 N까지 오름차순 탐색을 합니다.

 

 

def solution(N, M):
    visited = [False] * (N + 1)

    def dfs(path):
        if len(path) == M:
            print(' '.join(map(str, path)))
            return

        for i in range(1, N + 1):
            if not visited[i]:
                visited[i] = True
                dfs(path + [i])
                visited[i] = False  # 백트래킹

    dfs([])

# 예시 입력
N, M = map(int, input().split())
solution(N, M)

 

  • itertools.permutations
permutations(iterable, r)는 iterable에서 r개의 요소를 뽑아 만들 수 있는 모든 순열을 반환해요.
중복 없이 뽑기 때문에, 이 문제의 조건과 딱 맞아요.

 

from itertools import permutations

N, M = map(int, input().split())

for p in permutations(range(1, N + 1), M):
    print(' '.join(map(str, p)))

 

[추천 강의]

https://inf.run/7TU84

 

38군데 합격 비법, 2025 코딩테스트 필수 알고리즘| 딩코딩코 - 인프런 강의

현재 평점 5.0점 수강생 2,019명인 강의를 만나보세요. 초보자도 쉽게 이해하는 단계별 설명으로, 막연했던 코딩 테스트가 명확해집니다. 필요한 것만 배우고 바로 실전에 적용하세요! 알고리즘,

www.inflearn.com

 

https://inf.run/jzapB

 

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법| 딩코딩코 - 인

현재 평점 5.0점 수강생 457명인 강의를 만나보세요. 모든 이력서가 비슷해 보이는 세상, ‘차별화’가 합격을 만듭니다. 6주간, 백엔드 실무자가 직접 전하는 실전 이력서 전략 4가지를 배우세요.

www.inflearn.com

 

728x90
반응형