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
- KDT 프로그래머스 데브코스 프론트엔드
- 백준 js
- useEffect return
- Vue3 Router
- Vue3
- 모던 자바스크립트 딥다이브
- 머쓱이
- react customHook 예시
- K_Digital Training
- frontend roadmap study
- 모던 자바스크립트 Deep Dive TIL
- 투포인터알고리즘 js
- useRef 지역 변수
- 프로그래머스 K_Digital Training 프론트엔드
- 인프런 자바스크립트 알고리즘 문제풀이
- 개발자 특강
- KDT 프로그래머스
- 프로그래머스 데브코스 프론트엔드 TIL
- 프로그래머스 K_Digital Training
- 백준 node.js
- 모던 javascript Deep Dive
- 프로그래머스 데브코스
- 모던 자바스크립트 TIL
- 프로그래머스 데브코스 프론트엔드
- react 프로젝트 리팩토링
- 리팩토링 회고
- Frontend Roadmap
- TypeScript 문법 소개
- 우테캠 회고록
- 모던 자바스크립트 Deep Dive
Archives
- Today
- Total
프론트엔드 개발자의 기록 공간
[재귀함수, 완전탐색] 합이 같은 부분집합 본문
🚩 합이 같은 부분집합(DFS : 아마존 인터뷰)
📖 문제 설명 : N개의 원소로 구성된 자연수 집합이 주어지면, 이 집합을 두 개의 부분집합으로 나누었을 때 두 부분집합의 원소의 합이 서로 같은 경우가 존재하는지 판단
💡 배열의 전체 합을 이용한다. 두 개의 부분집합의 원소가 같다는 것은 결국 집합의 원소 총합이 하나의 부분 집합의 뺀 결과의 값이 부분 집합의 값과 같다는 것이다.
재귀 함수를 이용해서 각각의 요소를 포함하는 경우, 포함하지 않는 경우로 나누어 판단한다.
let flag = false // 합이 같은지 판단 변수
function recursion(arr, i, sum, total) {
if (flag) return
if (i >= arr.length) {
if (total - sum === sum) {
flag = true
}
return
}
recursion(arr, i + 1, sum + arr[i], total)
recursion(arr, i + 1, sum, total)
}
function solution(a) {
let answer = false
let arr = [...a]
let total = [...a].reduce((a, b) => a + b, 0)
// 배열, 시작 인덱스, 총합
recursion(arr, 0, 0, total)
answer = flag
return answer
}
let a = [1, 3, 5, 6, 7, 10]
console.log(solution(a))
👨💻 코드 설명
1. 재귀 함수를 이용하여 배열을 순차적으로 순회하며 해당 요소를 포함하는 경우, 포함하지 않는 경우로 나눈다.
2. baseCase i가 배열의 모든 요소를 순회했을 때(하나의 집합이 완성되었을 경우) 총합 - 부분 집합 값 = 부분 집합 값인지 판단한다.
3. 부분 집합 값을 찾은 경우, 전역 flag 변수로 해당 결과를 반환하고 나머지 재귀 함수 로직은 종료한다.
잘못된 설명, 코드, 예외 케이스가 있다면 댓글 남겨주시면 수정하겠습니다.
728x90
'알고리즘_JS > 인프런 JS알고리즘' 카테고리의 다른 글
[재귀함수, 완전탐색] 순열 구하기 (0) | 2022.04.02 |
---|---|
[재귀함수, 완전탐색] 중복순열 구하기 (0) | 2022.04.02 |
[이분 탐색] 마구간 정하기 (0) | 2022.04.02 |
[이분 탐색] 뮤직비디오 (0) | 2022.04.01 |
[투포인트] 결혼식 (0) | 2022.03.26 |
Comments