문제링크 : https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
작성코드
풀이
1. 백트래킹 알고리즘
일종의 트리 탐색 알고리즘이다.
현재 상태에서 모든 경로를 따라 뻗어나가다가 가능성이 없다 판단되면 되돌아가서 다시 해를 찾아간다.
알고리즘 구현 방식은 기본 DFS(깊이 우선 탐색) 방식과 동일하게 재귀 호출을 사용하여 노드를 찾는다.
※ DFS 방식 구현 (모든 경로를 탐색한다)
2. 구현
1) 숫자 범위 N과 수열 길이 M을 입력받는다, 탐색 값을 저장할 리스트 S를 선언한다.
2) 백트래킹 알고리즘은 dfs 깊이 우선탐색 방식에서 가능성이 없는 부분을 가지치기 한다.
수열의 경우 가지치기 되는 부분은 리스트 내 같은 수가 존재하는 경우이다,
( == 리스트 내에 현재 탐색 값이 존재하는 경우를 제거한다)
※ 위에서 작성한 dfs에서 가지치기 할 if 문을 추가하면 백트래킹 알고리즘이 완성된다.
'백준 > Python' 카테고리의 다른 글
[백준] 24039 2021은 무엇이 특별할까? (python 파이썬) (0) | 2022.11.07 |
---|---|
[백준] 25707 팔찌 만들기 (python 파이썬) (0) | 2022.11.07 |
[백준] 2563 색종이 (python 파이썬) (0) | 2022.11.01 |
[백준] 2566 최댓값 (python 파이썬) (0) | 2022.10.31 |
[백준] 2738 행렬 덧셈 (python 파이썬) (0) | 2022.10.30 |