STUDY/Algorithm
[프로그래머스_자바스크립트] Lv2. 타겟 넘버 / DFS, 깊이 우선 탐색
ez1n
2022. 12. 17. 05:06
[Javascript_ 타겟 넘버]
<STUDY>
📢 문제 📢
n개의 음이 아닌 정수들이 있습니다.
이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다.
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때
숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
- 각 숫자는 1 이상 50 이하인 자연수입니다.
- 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
입출력 예
numbers | target | return |
[1,1,1,1,1] | 3 | 5 |
[4,1,2,1] | 4 | 2 |
❗아이디어
- 깊이 우선 탐색을 이용하여 모든 경우의 수를 확인한다.
<전체 코드>
function solution(numbers, target) {
const n = numbers.length;
let answer = 0;
let check = new Array(n);
function DFS(index) {
if (index === n) {
let operate = 0;
for (let i = 0; i < n; i++) {
check[i] === "+" ? operate += numbers[i] : operate -= numbers[i];
}
operate === target && answer++;
} else {
check[index] = "+";
DFS(index + 1);
check[index] = "-";
DFS(index + 1);
}
}
DFS(0);
return answer;
}
<코드 설명>
☝ + or - 를 확인할 check 배열 만들기
let check = new Array(n);
✌ DFS 함수 만들기
function DFS(index) {
if (index === n) {
let operate = 0;
for (let i = 0; i < n; i++) {
check[i] === "+" ? operate += numbers[i] : operate -= numbers[i];
}
operate === target && answer++;
} else {
check[index] = "+";
DFS(index + 1);
check[index] = "-";
DFS(index + 1);
}
}
- 마지막에 계산한 값을 나타낼 operate 변수를 생성한다.
- index가 numbers의 길이와 같지 않은 경우 +와 -를 나누어 호출한다.
- index가 numbers의 길이와 같아지면 check 배열에 따라 값을 계산하고 target과 동일한 경우 answer를 1씩 증가시킨다.
🔆프로그래머스 Lv2. 타겟 넘버🔆
ez1n - Overview
Study -ing. ez1n has 13 repositories available. Follow their code on GitHub.
github.com