문제 설명
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [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
사용할 수 있는 숫자가 담긴 배열 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) {
let answer=0;
let array = Array(numbers.length).fill(0); // 값을 넣어줄 빈 배열 생성
function def(n){
if(n===numbers.length){ // 배열의 끝까지 돌았다면 중단
let hap = array.reduce((a,b)=>a+b); // 배열의 합을 구한다.
if(hap===target){ // 합이 target과 같으면 answer++
answer++;
}
}else{
array[n]=numbers[n]; // 값을 그대로 대입
def(n+1);
array[n]=(-numbers[n]); // - 부호를 넣어서 대입
def(n+1);
}
}
def(0);
return answer;
}
이 문제는 DFS/BFS를 사용하여 푸는 문제다.
이 알고리즘을 사용하여 풀어본 것이 처음이라 처음에는 어색하고 어떻게 풀어야 할지 감을 찾지 못했다.
그래서 하루 동안 DFS/BFS를 찾아보고 강의도 들은 결과 문제를 풀 수 있게 되었다.
나는 DFS를 이용해서 풀었기 때문에 재귀함수를 사용했다.
다른 사람의 풀이를 보니 재귀함수의 매계변수를 2개를 둬서 풀은 것을 보고 나는 다르게 풀고 싶어서 이렇게 풀어봤다.
'알고리즘 > 자바스크립트-프로그래머스' 카테고리의 다른 글
[프로그래머스 | Javascript] 코딩테스트 Lv2 - 기능개발 (0) | 2023.03.08 |
---|---|
[프로그래머스 | Javascript] 코딩테스트 Lv2 - n^2 배열 자르기 (0) | 2023.03.08 |
[프로그래머스 | Javascript] 코딩테스트 Lv2 - 위장 (2) | 2023.03.03 |
[프로그래머스 | Javascript] 코딩테스트 Lv2 - 귤 고르기 (0) | 2023.03.03 |
[프로그래머스 | Javascript] 코딩테스트 Lv1 - 숫자 문자열과 영단어 (0) | 2023.01.08 |