2024. 7. 9. 11:39ㆍ알고리즘문제 풀이/프로그래머스
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43165
풀이
각각의 수를 더하기 혹은 빼기한 경우를 전부 탐색한 후
각각의 수를 계산한 결과가 target이랑 같다면 경우의 수를 1씩 더해준다.
각각의 수를 더하기 혹은 빼기한 경우를 전부 탐색하기 위해 DFS(깊이 우선 탐색)을 이용했다.
예시)
[1, 1, 1, 1, 1]로 3 만들기
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
DFS 함수 설명
def dfs(result, cnt):
result: 현재까지 계산한 결과값
cnt: 계산한 횟수
if 전부 계산했다면
if 계산값이 목표랑 같다면
계산값을 구할 수 있는 경우의 수가 1 증가한다.
그리고 dfs 함수를 종료한다.
if cnt == len(numbers):
if result == target:
nonlocal answer
answer += 1
return
if 계산 중이라면
1) 더하기(+)한 경우의 dfs함수를 구한다
기존 result에서 현재 계산하고자 하는 수(numbers[cnt])를 더한다.
계산한 횟수 cnt는 1 증가한다
2) 빼기(-)한 경우의 dfs함수를 구한다
기존 result에서 현재 계산하고자 하는 수(numbers[cnt])를 뺀다
계산한 횟수 cnt는 1 증가한다
elif cnt < len(numbers):
dfs(result + numbers[cnt], cnt + 1)
dfs(result - numbers[cnt], cnt + 1)
초기값 설정
계산 가능한 경우의 수 answer의 초기값은 0이다.
answer = 0
dfs함수의 파라미터는 각각 0으로 해준다.
처음 계산한 값은 0, 처음 계산 횟수는 0이기 때문이다.
dfs(0, 0)
결과값
DFS 한 이후의 answer의 값을 return한다.
return answer
전체 코드
def solution(numbers, target):
answer = 0
def dfs(result, cnt):
if cnt == len(numbers):
if result == target:
nonlocal answer
answer += 1
return
elif cnt < len(numbers):
dfs(result + numbers[cnt], cnt + 1)
dfs(result - numbers[cnt], cnt + 1)
dfs(0, 0)
return answer'알고리즘문제 풀이 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 Lv.2 의상 (0) | 2024.07.10 |
|---|---|
| 프로그래머스 Lv.2 게임 맵 최단거리 (0) | 2024.07.09 |
| 프로그래머스 Lv.2 다리를 지나는 트럭 (0) | 2024.07.09 |
| 프로그래머스 Lv.2 기능개발 (0) | 2024.07.08 |
| 포르그래머스 Lv2 프로세스 (0) | 2024.07.08 |