💡 유형: DFS/BFS
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43165
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
구현
주어진 숫자를 적절히 더하고 빼서 타켓 넘버를 만드는 방법의 수
-> 주어진 숫자를 모든 경우의 수로 조합하고, 그 값 === target이면 답에 +1
각 숫자에는 +, - 두 가지 경우가 존재한다.
각 숫자마다 두 가지 경우 중 하나를 선택하고, 또 두 가지 경우 중 하나를 선택하는 것을 반복 => DFS
풀이
function solution(numbers, target) {
let count = 0;
const dfs = (index, sum) => {
if(index === numbers.length){ //모든 숫자를 사용한 경우
if(sum === target) count++;
return;
}
dfs(index+1, sum + numbers[index]);
dfs(index+1, sum-numbers[index]);
}
dfs(0,0);
return count;
}
- DFS 탐색 수행
- index를 이용하여 현재 탐색 중인 숫자의 위치를 추적한다.
- sum을 현재까지의 합으로 유지하여, 최종적으로 target과 비교한다.
- 모든 숫자를 탐색한 후 sum === target이면 경우의 수를 증가시킨다.
- 재귀 호출
- 각 숫자에 대해 +와 -의 두 가지 선택을 적용하며 DFS 탐색을 수행한다.
재귀 함수를 생각해내는 것이 아직 좀 어려운 것 같다.
dfs, bfs에 대한 개념은 아래의 블로그를 보면서 정리했다.
[Algorithm] DFS와 BFS의 쉬운 개념 + JavaScript 구현 방법
잊을만 하면 나오는 DFS와 BFS의 개념, JavaScript 구현 방법을 공부하고 확실히 기본 다지자!
velog.io
'알고리즘 > 탐색' 카테고리의 다른 글
[백준] 1920번: 수 찾기 (실버 4) - Javascript 풀이 (0) | 2025.03.20 |
---|---|
[프로그래머스] Lv 2. 게임 맵 최단 거리 - Javascript 풀이 (1) | 2025.02.04 |