일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 코딩테스트
- tr명령어
- html
- REST API
- 피보나치 수
- 자바스크립트
- 모던 자바스크립트
- ROT13
- mutation
- nestjs
- await
- 프로그래머스
- 자바스크립트의 역사
- typescript
- 카카오
- js
- linux
- 코딩태스트
- Query
- 백준
- javascript
- JavaStritp
- node
- typeorm
- 실패율
- RestAPI
- vanila js
- Bandit
- kakao
- graphql
- Today
- Total
꿀 떨어지는 코딩 양봉장
프로그래머스_Level.2 타겟넘버 본문
1.문제설명
문제: 타겟넘버
programmers.co.kr/learn/courses/30/lessons/43165?language=javascript
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+
programmers.co.kr
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. 제한 사항
- 주어지는 숫자의 개수는 2개 이상 20개 이하입니다.
- 각 숫자는 1 이상 50 이하인 자연수입니다.
- 타겟 넘버는 1 이상 1000 이하인 자연수입니다.
3.입출력 예
numbers | target | return |
[1, 1, 1, 1, 1] | 3 | 5 |
📌나의 풀이
처음 문제를 보았을 때는 어떠한 수학적 공식이 있지 않을까라는 생각을 했다. 하지만 아무리 생각해봐도 모든 값을 더하고 뺴고를 해봐야하는 것 같았다. 테스트 케이스가 모두 1,1,1,1,1이라서 순서를 생각해야하나 아니면 순서의 상관이 없이 target을 구하는 것인가 햇갈렸다 결론은 순서대로 더하기 뺴기를 수행해야한다.
어떤 방법으로 접근해야할지 몰라서 인터넷 검색을 했다.
function solution(numbers, target) {
var answer = 0;
function recur(cnt, sum){
if(cnt===numbers.length){
if(sum===target){
answer++;
}
return;
}
//+,-연산 모두 수행
recur(cnt+1, sum+numbers[cnt]);
recur(cnt+1, sum-numbers[cnt]);
}
recur(0,0);
return answer;
}
DFS를 사용하여 cnt=0부터 cnt가 numbers의 길이만큼 실행되면서
recur(cnt+1, sum+numbers[cnt]); 더하기 recur(cnt+1, sum-numbers[cnt]); 빼기 를 수행한다.
💡배운점
- 모든 값을 모두 더하거나 빼거나 DFS를 사용한다.
✔참고 자료
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스_Level.2 스킬트리 (0) | 2021.05.08 |
---|---|
프로그래머스_Level.2 124나라의 숫자 (0) | 2021.05.07 |
프로그래스_Level.2 게임 맵 최단거리 (0) | 2021.05.07 |
프로그래머스_Level.2 구명보트 (0) | 2021.05.06 |
프로그래머스_Level.2 멀쩡한 사각 (0) | 2021.05.06 |