[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
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스_자바스크립트] Lv.1 [1차] 비밀지도 / 2진수 변환, toString, padStart (0) | 2022.12.21 |
---|---|
[프로그래머스_자바스크립트] Lv.2 튜플 / 문자열, Set 사용하기 (0) | 2022.12.18 |
[프로그래머스_파이썬] Lv.1 성격 유형 검사하기 (0) | 2022.12.15 |
[프로그래머스_자바스크립트] Lv2. 최댓값과 최솟값 (0) | 2022.12.14 |
[백준코딩_파이썬] 10250번_ACM 호텔 (0) | 2022.09.28 |