Skip to content

Conversation

@JangAyeon
Copy link
Contributor

@JangAyeon JangAyeon commented Nov 24, 2025

답안 제출 문제

  • 문제 1
  • 문제 2
  • 문제 3
  • 문제 4
  • 문제 5

작성자 체크 리스트

  • Projects의 오른쪽 버튼(▼)을 눌러 확장한 뒤, Week를 현재 주차로 설정해주세요.
  • 문제를 모두 푸시면 프로젝트에서 StatusIn Review로 설정해주세요.
  • 코드 검토자 1분 이상으로부터 승인을 받으셨다면 PR을 병합해주세요.

검토자 체크 리스트

Important

본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!

  • 바로 이전에 올라온 PR에 본인을 코드 리뷰어로 추가해주세요.
  • 본인이 검토해야하는 PR의 답안 코드에 피드백을 주세요.
  • 토요일 전까지 PR을 병합할 수 있도록 승인해주세요.

@dalestudy
Copy link
Contributor

dalestudy bot commented Nov 24, 2025

⚠️ Week 설정이 누락되었습니다

프로젝트에서 Week를 설정해주세요!

설정 방법

  1. PR 우측의 Projects 섹션에서 리트코드 스터디 옆 드롭다운(▼) 클릭
  2. 현재 주차를 선택해주세요 (예: Week 14(current) 또는 Week 14)

📚 자세한 가이드 보기


🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다.

@JangAyeon JangAyeon moved this from Solving to In Review in 리트코드 스터디 6기 Nov 27, 2025
@JangAyeon JangAyeon requested a review from socow November 27, 2025 22:58
Copy link
Contributor

@seungriyou seungriyou left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이번 한 주도 고생 많으셨습니다~! ><


// 2자리
if (i + 1 < N && Number(s.slice(i, i + 2)) <= 26) {
count += dfs(i + 2);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코멘트와 코드만으로도 명확하게 이해되는 깔끔한 풀이인 것 같습니다!!

추가로 현재 코드는 memoization + dfs를 이용한 top-down DP로 dfs(i)를 계산하기 위해 dfs(i + 1), dfs(i + 2)가 필요한데요,

저는 이를 bottom-up DP로 풀이하고, dp[i]를 계산할 때 dp[i - 1], dp[i - 2]만 확인하므로 DP 테이블을 O(1) space 변수 두 개로 대체하여 공간 복잡도를 최적화했습니다!

이렇게도 풀 수 있어서 참고차 공유드려요~!

let num = n;
let result = 0;
while (true) {
const { v, rest } = calDivision(num);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

n & n-1로 오른쪽에서부터 1인 비트를 하나씩 지워가며 개수를 세는 방식인 Brian Kernighan's 알고리즘이라는 방법도 있어 공유드립니다~!

https://leetcode.com/problems/number-of-1-bits/solutions/4341511/faster-lesser-3-methods-simple-count-brian-kernighan-s-algorithm-bit-manipulation-explained

return;
}
for (let i = idx; i < N; i++) {
dfs(total + arr[i], i, [...route, arr[i]]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

매 dfs 호출마다 배열을 복사하기 때문에 비용이 발생하는데요, route 배열을 dfs() 호출 앞뒤로 push() / pop() 함으로써 재사용한다면 메모리 및 성능 측면에서 더 효율적일 것 같습니다!

const answer = [];
function dfs(total, idx, route) {
if (total >= target) {
if (total == target) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재는 total >= target 내부에서 total == target 조건을 한 번 더 검사하는데, total > target 조건과 total == target 조건으로 아예 분리하는 것이 가독성 측면에서 더 좋을 것 같아요!

* @return {number[][]}
*/
var combinationSum = function (arr, target) {
const N = arr.length;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arr를 정렬한다면 백트래킹 시 pruning이 가능합니다!

@TonyKim9401 TonyKim9401 merged commit 84f4816 into DaleStudy:main Dec 1, 2025
1 check passed
@github-project-automation github-project-automation bot moved this from In Review to Completed in 리트코드 스터디 6기 Dec 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Completed

Development

Successfully merging this pull request may close these issues.

3 participants