[알고리즘] 백트래킹

2025. 7. 24. 12:01·알고리즘
  • 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘

📕 문제 1. N과 M (1)

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복없이 M개를 고른 수열

- 해결 아이디어

비어있는 리스트에서 시작해 수를 하나씩 추가하면서 길이가 M인 수열이 완성되면 출력

 

- e.g. N: 4, M: 2 == 1부터 4까지 자연수 중 중복없이 2개를 고른 수열

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
answer = [0] * M
visited = [False] * (N+1)


def backtrack(k):  # k번째 인덱스에 값을 넣는 함수
    if k == M:
        print(*answer)
        return
    for i in range(1, N+1):
        if not visited[i]:
            answer[k] = i
            visited[i] = True
            backtrack(k+1)
            visited[i] = False


backtrack(0)

💻 연습 문제

바킹독 - 백트래킹 문제집


ℹ️ 참고

바킹독 - 백트래킹

'알고리즘' 카테고리의 다른 글

[알고리즘] 스택의 활용 (수식의 괄호 쌍)  (0) 2025.07.21
[알고리즘] 다이나믹 프로그래밍 (Dynamic Programming, DP)  (0) 2025.07.15
[알고리즘] 투 포인터  (0) 2025.07.15
'알고리즘' 카테고리의 다른 글
  • [알고리즘] 스택의 활용 (수식의 괄호 쌍)
  • [알고리즘] 다이나믹 프로그래밍 (Dynamic Programming, DP)
  • [알고리즘] 투 포인터
rubato.dev
rubato.dev
  • rubato.dev
    rubato.dev
    rubato.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (33) N
      • BOJ (28)
      • 알고리즘 (4)
      • TIL (0)
      • Project (1) N
  • 인기 글

  • 태그

    Zelda
    DFS
    PriorityQueue
    backtracking
    BOJ
    Project
    PYTHON
    stack
    BFS
    투 포인터
    dp
    Next.js
    Algorithm
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
rubato.dev
[알고리즘] 백트래킹
상단으로

티스토리툴바