| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Dynamic Programming
- 그래프 탐색
- isdigit()
- 알고리즘
- isalnum()
- find()
- 자료구조
- isnumeric()
- Knowledge graph
- 코테
- 백준
- explainable recommendation
- 그래프
- 프로그래머스
- Deque
- 추천시스템
- kg
- Stack
- 동적 프로그래밍
- 우선순위 큐
- bfs
- 파이썬
- Algorithm
- Python
- Recommendation
- knowledge
- isalpha()
- LSTM
- DP
- 정렬
Archives
- Today
- Total
데린이 고인물되기
[TIL] 250605 - 완전 탐색 가능 여부 판단 기준(시간 복잡도) 본문
반응형
알고리즘 문제를 풀다 보면 완전 탐색을 사용해 문제를 풀어야하는 것들이 많습니다.
그런데, 문제를 풀기전에 이 문제가 완전 탐색으로 풀어도 괜찮은 문제인지 생각해보고 코드를 짤 필요가 있어보여 그 기준을 정리해봤습니다.
- 모든 경우의 수 × 각 경우를 처리하는 시간이 1억(100,000,000) 이하 정도면 일반적으로 괜찮다고 보고 들어가면 된다고 합니다.
- 프로그래머스 피로도 문제의 경우 제한사항을 보면 아래와 같습니다.
- k는 1 이상 5,000 이하인 자연수입니다.
- dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하입니다.
- dungeons의 가로(열) 길이는 2 입니다.
- dungeons의 각 행은 각 던전의 ["최소 필요 피로도", "소모 피로도"] 입니다.
- "최소 필요 피로도"는 항상 "소모 피로도"보다 크거나 같습니다.
- "최소 필요 피로도"와 "소모 피로도"는 1 이상 1,000 이하인 자연수입니다.
- 서로 다른 던전의 ["최소 필요 피로도", "소모 피로도"]가 서로 같을 수 있습니다.
- 던전 수는 최대 8개로, 가능한 던전 탐험 순서의 모든 경우의 수는 순열(permutation)문제입니다.
- 던전 개수 : 8개
- 가능한 순열 수 : 8! = 40320
- 각 순열을 검사할 때 피로도를 계속 차감하며 최대 8번 탐험을 시도합니다
- 즉, 순열 하나당 처리 시간은 O(8) ≈ 상수 시간
- 이를 통해 전체 시간 복잡도를 구해보면
- 40320 (순열 수) × 8 (각 순열 처리) = 약 32만 번의 연산 이므로 이는 1억보다 훨씬 작으므로 완전 탐색으로 충분히 풀리는 문제라는 판단을 내릴 수 있게 되는겁니다.
- 프로그래머스 피로도 문제의 경우 제한사항을 보면 아래와 같습니다.
반응형
'Algorithm > 정리' 카테고리의 다른 글
| [TIL] 250608 - 트리 (1) | 2025.06.08 |
|---|---|
| [TIL] 250607 - 그래프 (0) | 2025.06.07 |
| [TIL] 250531 - 이분탐색(Lower Bound / Upper Bound / Custom Bound) (0) | 2025.05.31 |
| [TIL] 250529 - 파이썬 itertools.permutations 사용법 (0) | 2025.05.29 |
| [TIL] 250529 - 소수 판별 알고리즘(파이썬) (1) | 2025.05.29 |