Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Vue3
- TypeScript 문법 소개
- 프로그래머스 K_Digital Training
- 프로그래머스 데브코스 프론트엔드 TIL
- react customHook 예시
- useEffect return
- 모던 자바스크립트 Deep Dive TIL
- useRef 지역 변수
- 개발자 특강
- 리팩토링 회고
- 모던 자바스크립트 딥다이브
- 모던 자바스크립트 TIL
- 투포인터알고리즘 js
- KDT 프로그래머스
- KDT 프로그래머스 데브코스 프론트엔드
- frontend roadmap study
- 백준 node.js
- 프로그래머스 데브코스 프론트엔드
- Frontend Roadmap
- K_Digital Training
- 머쓱이
- 모던 javascript Deep Dive
- 모던 자바스크립트 Deep Dive
- 프로그래머스 데브코스
- 인프런 자바스크립트 알고리즘 문제풀이
- Vue3 Router
- 프로그래머스 K_Digital Training 프론트엔드
- 백준 js
- 우테캠 회고록
- react 프로젝트 리팩토링
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[프로그래머스 JavaScript] 타켓 넘버 본문
🚩 프로그래머스 Level2 타켓 넘버 -> 깊이/너비 우선탐색(DFS/BFS)
📖 문제 설명
주어진 numbers에서 덧셈, 뺄셈을 해서 전부 가능한 경우의 수를 구하면 된다.
그렇게 구한 경우의 수를 target과 비교해서 맞으면 1, 아니면 0을 리턴하면 된다.
👉 소스 코드 ⏰시간복잡도 O(2^n)
function solution(numbers, target) {
var answer = 0;
//numbers, target, 양수(음수)값, 인덱스를 넘겨줌
answer = targetNumber(numbers, target, numbers[0], 1) + targetNumber(numbers, target, numbers[0] * -1, 1);
return answer;
}
function targetNumber(numbers, target, sum, i){
//numbers까지 구했으면 target 값과 비교
if(i === numbers.length){
if(sum === target) return 1;
else return 0;
}
//받은 누적값 sum에 대해 경우의 수(양수, 음수)를 계산하여 재귀호출
return targetNumber(numbers,target,sum+numbers[i],i+1) + targetNumber(numbers,target,sum+numbers[i]*-1,i+1);
}
👨💻 코드 설명
코드 로직은 피보나치 수열-재귀 알고리즘을 이용했습니다.
주어진 모든 경우의 수를 구하기 위해 재귀 함수를 이용합니다.
배열 첫번째 값을 양수, 음수의 경우로 나누어 재귀 함수에 넣어줍니다.
재귀 로직을 통해 피보나치 수열과 동일한 로직으로 모든 경우의 수가 구해집니다.
배열의 길이까지 탐색했으면 target 값과 비교하여 리턴해줍니다.
728x90
'알고리즘_JS > 프로그래머스_Level2' 카테고리의 다른 글
[프로그래머스 JavaScript] 프린터 (0) | 2021.07.22 |
---|---|
[프로그래머스 JavaScript] 조이스틱 (0) | 2021.07.22 |
[프로그래머스 JavaScript] 오픈채팅방 (0) | 2021.07.22 |
[프로그래머스 JavaScript] 기능개발 (0) | 2021.07.21 |
[프로그래머스 JavaScript] 짝지어 제거하기 (0) | 2021.07.21 |
Comments