[sangbeenmoon] WEEK 04 Solutions - #2756
Conversation
📊 sangbeenmoon 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming, Hash Map / Hash Set
- 설명: 동전 교환 문제의 최소 동전 개수를 구하기 위해 하위 문제를 재귀적으로 해결하고, 결과를 메모이제이션으로 저장하는 DP 접근이며, 보조적으로 해시맵을 사용해 이미 계산한 타깃을 저장합니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.coinChange (first implementation) — Time: O(amount * len(coins)) / Space: O(amount)
| 복잡도 | |
|---|---|
| Time | O(amount * len(coins)) |
| Space | O(amount) |
피드백: 점화식을 재귀로 풀고 캐시를 사용해 중복 계산을 줄였지만 amount에 비례한 재귀 깊이가 필요하며, 최악의 경우 지수적 탐색을 피하기 어렵다.
개선 제안: 동적계획법의 순수한 바텀업(Bottom-Up) 접근이나 BFS 기반 풀이로 시간복잡도를 개선할 수 있다.
풀이 2: Solution.coinChange (second implementation) — Time: O(amount * len(coins)) / Space: O(amount)
| 복잡도 | |
|---|---|
| Time | O(amount * len(coins)) |
| Space | O(amount) |
피드백: 초기화된 memo에 목표 금액과 관련된 중간 결과를 저장해 중복 계산을 줄인다.
개선 제안: 반복적 DP(Bottom-Up)로 구현하면 함수 재귀 호출 오버헤드를 줄일 수 있다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Binary Search
- 설명: 회전된 정렬 배열에서 최솟값을 이진 탐색으로 찾는 방식으로, 중간 인덱스와 양 끝의 값 비교를 통해 탐색 범위를 반으로 축소합니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.findMin (first solution) — Time: O(log n) / Space: O(1)
| 복잡도 | |
|---|---|
| Time | O(log n) |
| Space | O(1) |
피드백: 마지막 종료 조건이 명시적이지 않으나 일반적인 회전 배열 이진 탐색 패턴과 일치한다.
개선 제안: 특정 예외 케이스(중간값이 경계에 위치하는 경우)에 대한 명확한 처리 주석을 추가하면 가독성이 높아진다.
풀이 2: Solution.findMin (second solution) — Time: O(log n) / Space: O(1)
| 복잡도 | |
|---|---|
| Time | O(log n) |
| Space | O(1) |
피드백: 조건 비교를 통해 경계를 엄밀하게 좁히도록 구현되어 있다.
개선 제안: 동일 로직의 중복 제거를 통해 코드 중복을 줄이면 좋다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Depth-First Search, Backtracking
- 설명: 단어의 각 문자 위치를 탐색하면서 방향을 따라 방문 여부를 관리하는 재귀 DFS와, 실패 지점에서 다시 이전 상태로 되돌리는 백트래킹 패턴이 핵심이다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.exist (첫 번째 구현) — Time: O(m * n * 4^L) / Space: O(m * n)
| 복잡도 | |
|---|---|
| Time | O(m * n * 4^L) |
| Space | O(m * n) |
피드백: 백트래킹과 방문 기록을 통해 중복 경로를 제거하지만 최악의 경우 지수적 시간 복잡도가 발생할 수 있다.
개선 제안: 효율을 위해 감소된 상태 공간에서의 가지치기 조건 강화와 시간 복잡도 분석 명시가 필요하다.
풀이 2: Solution.exist (두 번째 구현) — Time: O(m * n * 4^L) / Space: O(m * n)
| 복잡도 | |
|---|---|
| Time | O(m * n * 4^L) |
| Space | O(m * n) |
피드백: 각 위치에서 시작해 DFS를 진행하고 종료 조건을 명확히 처리한다.
개선 제안: 반복적 구현이나 최적화된 가지치기, 사전 인덱스 매핑 등을 통해 성능을 개선할 수 있다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
| left = 0 | ||
| right = len(nums) - 1 | ||
| mid = (left + right) // 2 |
There was a problem hiding this comment.
이 부분 mid 할당은 중복으로 보여서 지워도 될 거 같습니다.
There was a problem hiding this comment.
요거 돌려보니 3000ms 정도 나오는데 최적화 좀더 해보셔도 좋을 거 같습니다.
| while left < right: | ||
| mid = (left + right) // 2 | ||
|
|
||
| if nums[mid] > nums[right]: |
There was a problem hiding this comment.
탐색 중간에 정답인 경우 미리 리턴해보도록 해보셔도 좋을 거 같습니다.
* solved same-tree. * solved top-k-frequent-elements. * remove outdated files. * LCS, house-robber. * week2. * week3. * week4. --------- Co-authored-by: sangbeenmoon <moon.sb@navercorp.com>
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!