인프런 커뮤니티 질문&답변

wodms4525님의 프로필 이미지
wodms4525

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

5. 합이 같은 부분집합(이진트리 DFS)

이런식으로 풀어도 괜찮을까요?

작성

·

223

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.function solution(n, arr) { let answer = 'NO'; let ch = Array.from({ length: n }, () => 0); function DFS(v) { if (v === n - 1) { let aSum = 0; let bSum = 0; for (let j = 0; j < n; j++) { if (ch[j]) aSum += arr[j] //0이면 else bSum += arr[j] //1이면 } if (aSum === bSum) return answer = 'YES' } else { ch[v] = 1; DFS(v + 1) ch[v] = 0 DFS(v + 1) } } DFS(0); return answer } console.log('answer', solution(6, [1, 3, 5, 6, 7, 10]))

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

wodms4525님, 자바스크립트로 알고리즘 문제를 푸는 방식에 관해서 질문 주셨군요. 제공해 주신 코드는 부분집합을 생성하여 두 개의 부분집합의 합이 같은지를 확인하는 문제를 푸는 DFS(깊이 우선 탐색) 방식의 코드로 보입니다. 논리적으로도 올바르고 사용자가 이해할 수 있도록 잘 작성된 것 같습니다. 다만 코드에서 부분집합의 합을 구하는 부분에서 주석 처리가 ‘0이면’과 ‘1이면’으로 되어 있는데, 이 부분은 ch 배열의 해당 인덱스 값을 기준으로 배열 arr의 값을 aSum 혹은 bSum에 더해주는 로직으로, 주석이 다소 혼동을 줄 수 있을 것 같습니다.

또한, 효율성 측면에서 볼 때, aSumbSum의 값을 구하는 과정에서 모든 경우의 수마다 전체 배열을 다시 순회하여 합을 구하고 있어서 시간 복잡도가 증가합니다. 최적화를 고려한다면, 재귀 함수에 합계를 인자로 전달하여 부분집합을 확장할 때마다 갱신하는 방식을 사용할 수도 있습니다.

현재 코드대로라도 문제를 풀기에는 충분하지만, 프로그래밍에 있어서는 항상 여러 가지 해결 방법이 존재하므로 다양한 접근 방법도 고려해 볼 수 있습니다.

코드 관련 더 자세한 질문이나 다른 문제가 있으면 언제든지 질문해 주세요. 조금 더 효율적인 코드에 대해서도 고민해 보시는 것을 추천드립니다.

열심히 학습하시는 wodms4525님을 응원합니다! 🌟

원하는 답변을 찾지 못하셨나요?
그럼 우측 하단의 ‘문의하기’에서 직접 문의해 보세요.
최대한 빠르게 답변드리도록 하겠습니다!

wodms4525님의 프로필 이미지
wodms4525

작성한 질문수

질문하기