[Yiseull] WEEK 04 Solutions#2755
Conversation
(cherry picked from commit 89322c3554301c0859b5e61e08d20f6ab995533e)
(cherry picked from commit c08337da842878a78cbf56d19d4f4618d8e6bb2e)
📊 Yiseull 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
sangbeenmoon
left a comment
There was a problem hiding this comment.
깔끔하게 잘 풀어주셨네요! 이번 한주도 고생 많으셨습니다 👍
parkhojeong
left a comment
There was a problem hiding this comment.
수고하셨습니다. 깔끔하게 풀어주신 거 같네요.
| if (nums[right] <= nums[left] && nums[left] <= nums[mid]) { | ||
| answer = Math.min(answer, nums[mid]); | ||
| left = mid + 1; | ||
| } | ||
| else { | ||
| answer = Math.min(answer, nums[mid]); | ||
| right = mid - 1; | ||
| } | ||
| } |
There was a problem hiding this comment.
탐색 중간에 답을 판별할 수 있어서 최적화 시도해보셔도 좋을 거 같습니다.
추가로 if (nums[right] <= nums[left] && nums[left] <= nums[mid]) { 는 조금 더 간소화 가능하니 생각해보셔도 좋을 듯 합니다.
There was a problem hiding this comment.
left, right를 비교해서 답을 바로 판별할 수 있네요! 말씀해주신 방향으로 최적화했습니다. 더 좋은 방향 제안해주셔서 감사합니다!👍
| int[] dp = new int[amount + 1]; | ||
| Arrays.fill(dp, amount + 1); | ||
| dp[0] = 0; | ||
|
|
||
| for (int i = 1; i < amount + 1; i++) { | ||
| for (int coin : coins) { | ||
| if (coin <= i) { | ||
| dp[i] = Math.min(dp[i], dp[i - coin] + 1); | ||
| } | ||
| } | ||
| } | ||
|
|
||
| return dp[amount] > amount ? -1 : dp[amount]; | ||
| } |
There was a problem hiding this comment.
dp[amount] > amount가 실제로 amount + 1 인지를 비교하는 거고 amount + 1 이 매직넘버로 쓰이고 있어서 변수로 선언해서 쓰시면 더 좋을 거 같습니다
There was a problem hiding this comment.
매직넘버로 인해 풀이 가독성이 더 올라갔네요 감사합니다~!
| Arrays.fill(dp, amount + 1); | ||
| dp[0] = 0; | ||
|
|
||
| for (int i = 1; i < amount + 1; i++) { | ||
| for (int coin : coins) { | ||
| if (coin <= i) { |
There was a problem hiding this comment.
amount 보다 큰 coin 처리은 안쓰도록 해주면 최적화 가능할 거 같습니다
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming
- 설명: 금액별 최소 동전 개수를 구하는 DP 아이디어로, 각 금액 i에 대해 모든 동전을 사용해 dp[i]를 갱신하는 전형적인 동적 계획법 문제의 풀이이다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(amount * C) |
| Space | O(amount) |
피드백: 금액마다 모든 동전을 고려해 dp[i]를 갱신한다. dp 배열 크기는 amount+1 이고, 외부 루프가 amount 번, 내부가 동전 수(C) 만큼 수행된다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Binary Search
- 설명: 배열이 로테이션된 정렬 배열이라는 전제 아래, 중간 값을 기준으로 좌우를 구분해 범위를 절반으로 줄이는 이진 탐색 패턴이 사용됩니다. 시간복잡도 O(log n)로 최솟값을 찾습니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(log n) |
| Space | O(1) |
피드백: 양 끝 비교와 중간값 비교로 최솟값 인덱스를 이진 탐색으로 좁혀 간다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Depth-First Search, Binary Search
- 설명: 코드는 이진트리를 재귀적으로 방문하며 자식 노드를 먼저 탐색한 뒤 현재 노드의 깊이를 합산합니다. 트리의 깊이를 구하는 전형적인 DFS 패턴이며, 이 자체로 이진 트리에 대한 탐색 기반 문제에 자주 활용됩니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(h) |
피드백: 노드 방문은 한 번씩 이루어지며, 재귀 스택은 트리의 높이 h 만큼 사용된다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Linked List
- 설명: 두 개의 정렬된 연결 리스트를 포인터 두 개로 순차적으로 비교해 작은 노드를 연결하는 방식으로 합치는 패턴이다. 리스트의 길이가 n, m일 때 선형 시간으로 동작한다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n + m) |
| Space | O(1) |
피드백: 두 리스트를 병합하여 비교적으로 선형 시간에 처리한다. 추가 노드 생성 없이 기존 노드를 연결한다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Backtracking, Depth-First Search, Hash Map / Hash Set
- 설명: 단어를 보드에서 DFS로 탐색하며, 방문한 셀을 임시로 표시하고 되돌려 놓는 방식으로 모든 경로를 탐색한다. 이 풀이의 핵심은 재귀를 이용한 백트래킹으로 가능한 경로를 탐색하는 패턴이다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(4^(L) * M * N) |
| Space | O(L) |
피드백: 최악의 경우 모든 경로를 탐색하므로 지수적 시간 복잡도가 된다. 중복 방문 방지를 위해 방문 흔적을 남긴다.
개선 제안: 현재 구현이 적절해 보입니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!