-
[프로그래머스] 타겟 넘버 (JS)알고리즘/프로그래머스 2021. 10. 10. 21:47
문제 이해하기
- n개의 음이 아닌 정수를 적절히 더하거나 빼서 타겟 넘버를 만들어야 한다.
- 예를 들어 [1,1,1,1,1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있다.
데이터 추상화
- nunber 값이 배열로 들어온다. 배열들을 조합하여 원하는 결과를 낼 수 있기에 따로 추상화할 영역은 보이지 않는다.
알고리즘
- 적절히 더하거나 빼서 타겟 넘버를 만들어야 한다. 즉 더하기 빼기만 할 수 있다,
- 모든 경우의 수를 다 해보자. 즉 재귀 함수를 호출하여 타깃 넘버를 만들어 보자
const cal = (value, depth) => { // 기저 사례 - 재귀함수는 배열의 길이가 되면 나온다 if(depth === numbers.length){ if( target === value){ answer++; } return; } // 더하기 cal( value + numbers[depth], depth+1); // 빼기 cal( value - numbers[depth], depth+1); }
구현
function solution(numbers, target) { var answer = 0; const cal = (value, depth) => { if(depth === numbers.length){ if( target === value){ answer++; } return; } cal( value + numbers[depth], depth+1); cal( value - numbers[depth], depth+1); } cal( 0 + numbers[0], 1); cal( 0 - numbers[0], 1); return answer; }
정리 및 느낀 점
- 이번에 풀어본 문제는 다른 접근의 풀이였다. 배열을 직접 순회하는 형식이 아닌, 함수를 재귀적으로 호출하여 해결하는 방식의 풀이였다.
- +, - 이외에도 x, % 이 되어도 풀 수 있을 듯하다.
출처
https://programmers.co.kr/learn/courses/30/lessons/43165?language=javascript
728x90'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] JS 키패드 누르기 (0) 2022.04.12 [프로그래머스] 위클리 10주차 - 교점에 별 만들기(JS) (0) 2021.10.14 [프로그래머스] 위클리 9주차 - 전력망을 둘로 나누기(JS) (0) 2021.10.09 [프로그래머스] 위클리 2주차 - 상호평가(JS) (0) 2021.10.04 [프로그래머스] 위클리 1주차 - 부족한 금액 계산하기(JS) (0) 2021.09.30