Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 파이썬 코테
- C++
- til
- 오블완
- Python
- 안드로이드
- DP
- 백준
- 코테
- 코딩테스트 준비
- Laravel
- 코테 파이썬
- 플러터
- 개발자취업
- 항해99
- 코딩테스트
- vue
- flutter getx
- 라라벨
- Flutter
- ML
- 개발자 취업
- 99클럽
- 알고리즘
- 파이썬
- 티스토리챌린지
- 코딩테스트준비
- react
- 뷰
- c++ 코테
Archives
- Today
- Total
잡다로그
[Python/코테] 백준 15656 N과 M(7) 본문
15656 N과 M(7)
문제 및 조건 설명: https://www.acmicpc.net/problem/15656

알고리즘 설계
모든 수열을 구해야 하고, N과 M의 범위가 크지 않으므로 모든 경우를 탐색하는 백트래킹을 활용한다.
백트래킹은 DFS로 전체를 탐색하되 조건이 맞지 않으면 중단하는 알고리즘이다.
알고리즘 구현
출처: https://honggom.tistory.com/109
import sys
n, m = map(int, input().split())
arr = list(map(int, sys.stdin.readline().split()))
sub = []
def func():
# m개 완성 되었으면 종료
if len(sub) == m:
print(*sub)
return
for k in range(n):
# 하나 추가하고
sub.append(arr[k])
# 나머지 정하기
func()
# 현재 원소로 가능한 경우는 윗줄에서 끝남
# 다음 원소 추가를 위해 pop
sub.pop()
arr.sort()
func()
나다어
- sub.pop()을 하지 않아서 무한 루프에 빠졌었음. 재귀적인 관점에서 생각하려면, 크게 생각해야 한다. 함수 한 번의 동작이 아닌 함수의 "역할"로 이해해보자.
정답 코드에서 func()의 역할은 추가한 뒤 다음 단계로 이동하는 것이다. sub.pop()이 실행되기 전에 func()에서는 base condition까지 도달하며 모든 경우의 수를 탐색한 뒤 종료될 것.
'Algorithm' 카테고리의 다른 글
| [Python/코테] 백준 9095 1, 2, 3 더하기 (0) | 2023.11.26 |
|---|---|
| [Pyhton/코테] 백준 1463 1로 만들기 (0) | 2023.11.26 |
| [Python/코테] 백준 2239 스도쿠 (0) | 2023.11.21 |
| [Python/코테] 백준 17829 222-풀링 (0) | 2023.11.20 |
| [Python/코테] 백준 21735 눈덩이 굴리기 (0) | 2023.11.20 |
Comments