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
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- api gateway 설계
- api gateway 필터
- ApplicationEvent
- argocd
- assertThat
- async/await
- AVG
- AWS
- aws autoscaling
- aws eks
- aws iam role
- AWS KMS
Archives
- Today
- Total
기록
[programmers/python] 타겟 넘버 - DFS 본문
문제 요약
- numbers: 길이가 2 이상 20 이하인 양의 정수 배열
- target: 만들고자 하는 정수 (1~1000)
- 각 숫자마다 +, - 연산을 선택해서 합을 만들 수 있는 경우의 수를 구하라
DFS 풀이 전략
DFS로 다음 두 가지를 매 순간 재귀적으로 선택한다:
- + numbers[i]
- - numbers[i]
def solution(numbers, target):
def dfs(n, i): # 누적합 n, 현재 인덱스 i
if i == len(numbers): # 모든 수를 다 썼다면
return int(n == target) # 목표값이면 1, 아니면 0
return dfs(n + numbers[i], i + 1) + dfs(n - numbers[i], i + 1)
return dfs(0, 0)
Python은 내부적으로 재귀 호출이 빠르게 처리되기 때문에, len(numbers) ≤ 20인 조건 안에서는 충분히 견딜 수 있다.
시간 복잡도 분석
- 각 숫자마다 +, - 두 가지 선택 → 경우의 수: 2^n
- n = 20일 때 최대 2^20 = 1,048,576
이는 약 100만 번의 호출이며, Python에서도 1초 내외로 수행 가능하다.
'코딩테스트 > python' 카테고리의 다른 글
[programmers/python] 연속된 숫자 제거하기 – 스택/큐 (0) | 2025.05.28 |
---|---|
[programmers/python] 게임 맵 최단거리 – BFS (0) | 2025.05.26 |
[programmers/python] 네트워크 개수 구하기 – Union-Find (0) | 2025.05.26 |
[programmers/python] 단어 변환 – 두 가지 BFS 풀이 비교 (0) | 2025.05.26 |
[programmers/python] K번째 수 - 배열 슬라이싱 (0) | 2025.05.25 |
Comments