[ICE0208] WEEK 04 Solutions - #2744
Conversation
📊 ICE0208 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming
- 설명: 코인 교환 문제를 각 금액에 대해 최솟값을 구하는 전형적인 DP 풀이로, 부분 문제의 해를 이용해 전체 해를 구성합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(amount * coins.length) | O(amount * number_of_coins) | ❌ |
| Space | O(amount) | O(amount) | ✅ |
피드백: dp 배열을 구성해 각 합을 만들기 위한 최소 동전 수를 갱신한다. 각 금액에 대해 모든 동전을 시도하므로 전체 시간은 금액과 코인 수의 곱에 비례한다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Binary Search
- 설명: 배열의 회전 여부를 조건으로 중간 값을 기준으로 구간을 반으로 좁히며 최솟값 위치를 찾는 이진 탐색 패턴을 사용합니다. 특정 조건에 따라 왼쪽/오른쪽 부분배열을 재귀적으로 탐색합니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(log n) |
| Space | O(log n) |
피드백: 배열의 회전 지점을 판단하여 반으로 나누며 최소값의 위치를 찾는다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Depth-First Search, Divide and Conquer
- 설명: 재귀적으로 좌우 자식 노드를 방문하며 깊이를 계산하는 구조로, 트리의 최대 깊이를 구하는 문제는 DFS로 해결되고, 분할된 문제를 합쳐 최종 결과를 얻는 형태(Divide and Conquer)로 볼 수 있습니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(h) |
피드백: 트리를 한 번 방문하며 깊이를 측정한다. 최악의 경우 트리의 높이만큼 호출 스택이 필요하다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Linked List
- 설명: 리스트를 두 포인터(list1, list2)로 순회하며 작은 노드를 차례로 연결하는 방식으로 두 정렬된 리스트를 합친다. 추가 공간 없이 기존 노드를 재사용하는 구현이다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n + m) |
| Space | O(1) |
피드백: 두 리스트를 병합하면서 각 노드 포인터를 차례로 연결한다. 추가 노드 생성 없이 재사용한다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Depth-First Search, Backtracking, Trie
- 설명: DFS를 이용해 인접 칸으로 이동하며 단어의 각 글자를 맞춰 탐색하고, 방문 배열로 경로를 추적하는 백트래킹 방식의 해법이다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(4^(L) * N*M) |
| Space | O(N*M) |
피드백: 시작 위치에서 DFS를 통해 인접 칸으로 탐색하며 방문 여부를 추적한다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
dfs 로 풀어주셨네요. while 문을 사용하시면 좀 더 간결하게 작성이 가능할 거 같아서 시도해보셔도 좋을 거 같습니다.
There was a problem hiding this comment.
요거 돌려보니 runtime이 하위 20~30% 정도로 나와서 최적화 좀 더 시도해보셔도 좋을 거 같습니다. 불필요한 탐색 과정을 사전에 정리하는 방식으로 접근해보시면 될 거 같습니다.
There was a problem hiding this comment.
직접 돌려주시기까지 하시다니 꼼꼼한 리뷰 감사합니다!
복습하면서 더 최적화해보도록 하겠습니다!
| public int coinChange(int[] coins, int amount) { | ||
| // 필요한 동전의 최대 개수는 amount개이므로, | ||
| // amount + 1은 만들 수 없는 상태를 나타내기에 충분하다. | ||
| int impossible = amount + 1; |
There was a problem hiding this comment.
요거 재귀로도 풀어보셔도 좋을 거 같습니다.
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!