[liza0525] WEEK 09 Solutions#2581
Conversation
📊 liza0525 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-4.1-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Fast & Slow Pointers
- 설명: 이 코드는 두 포인터를 이용해 리스트를 탐색하며, 순환 여부를 판단하는 방식으로 빠른 포인터와 느린 포인터를 활용하는 패턴입니다.
📊 시간/공간 복잡도 분석
ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.
풀이 1: Solution.hasCycle (fast/slow pointers) — Time: ✅ O(n) → O(n) / Space: ✅ O(1) → O(1)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 포인터 두 개를 이용하여 리스트를 한 번 순회하며 순환 여부를 판단하므로 시간 복잡도는 리스트 길이 n에 비례하는 O(n)입니다. 추가 공간은 상수만 사용하므로 O(1)입니다.
개선 제안: 현재 구현이 적절해 보입니다.
풀이 2: Solution.hasCycle (set 방문 기록) — Time: ✅ O(n) → O(n) / Space: ✅ O(n) → O(n)
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(n) | O(n) | ✅ |
피드백: 각 노드를 한 번씩 방문하며 방문한 노드를 집합에 저장하므로 시간은 리스트 길이 n에 비례하는 O(n)입니다. 공간은 방문 노드 수만큼 필요하여 O(n)입니다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming
- 설명: 이 코드는 연속된 부분 배열 내 최대 곱을 찾기 위해 이전 상태를 저장하며 최적 부분 문제를 해결하는 동적 프로그래밍 패턴을 사용합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 한 번의 리스트 순회 내에서 현재 최대, 최소 곱을 갱신하며 최댓값을 찾기 때문에 시간 복잡도는 O(n)입니다. 변수만 사용하므로 공간 복잡도는 O(1)입니다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Sliding Window, Hash Map / Hash Set
- 설명: 이 코드는 두 포인터를 이용한 슬라이딩 윈도우 기법으로, 특정 조건을 만족하는 최소 구간을 찾기 위해 해시 맵을 활용하여 문자 개수를 추적합니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(n) | O(n) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 윈도우를 오른쪽으로 확장하고, 조건 충족 시 왼쪽을 이동하며 최적의 윈도우를 찾기 때문에 시간 복잡도는 문자열 길이 n에 비례하는 O(n)입니다. 알파벳 개수는 제한적이므로 공간은 상수에 가깝습니다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: DFS
- 설명: 이 코드는 깊이 우선 탐색(DFS)을 이용하여 각 지점에서 시작하는 것이 아닌, 태평양과 대서양에 인접한 곳에서 출발하여 도달 가능한 지점을 찾는 방식입니다. 재귀 호출로 인접한 높이 조건을 만족하는 곳을 탐색하는 구조입니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(m * n) | O(m * n) | ✅ |
| Space | O(m * n) | O(m * n) | ✅ |
피드백: 각 지점에서 DFS를 수행하며 방문 가능한 지점을 집합에 저장하므로 시간과 공간 모두 맵 크기 mn에 비례하는 O(mn)입니다.
개선 제안: 현재 구현이 적절해 보입니다.
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Bit Manipulation
- 설명: 이 코드는 비트 연산을 활용하여 두 정수의 합을 계산하는 방법으로, 비트 조작을 통해 덧셈을 구현하는 패턴입니다.
📊 시간/공간 복잡도 분석
| 유저 분석 | 실제 분석 | 결과 | |
|---|---|---|---|
| Time | O(1) | O(1) | ✅ |
| Space | O(1) | O(1) | ✅ |
피드백: 반복문은 최대 32번 수행하며, 변수만 사용하므로 시간 복잡도는 상수 O(1)입니다. 공간도 상수입니다.
개선 제안: 현재 구현이 적절해 보입니다.
| prev_max_val = max_val # 이전 max_val은 업데이트 되기 전에 잠시 저장 | ||
|
|
||
| # 현재 loop에서 num과 max_val(이전까지의 최대곱) * num과 min_val(이전까지의 최소곱) * num 중 | ||
| # 가장 큰 수를 max_val로 업데이트 | ||
| # 이때 num이 저장된다는 의미는 최대/최소곱을 해당 숫자에서 다시 시작하여 곱한다는 의미 | ||
| max_val = max(num, max_val * num, min_val * num) | ||
|
|
||
| # min_val도 max_val과 동일한 원리로 저장, 이때는 미리 저장한 prev_max_val을 이용 | ||
| min_val = min(num, prev_max_val * num, min_val * num) |
There was a problem hiding this comment.
음수 곱 때문에 max_val 업데이트 전에 prev_max_val를 따로 저장해 두고, 그 값을 min_val 갱신에 사용하는 구조가 깔끔하고 좋네욥!
@reeseo3o 빠른 리뷰 감사합니다! 다음주도 화이팅입니다 👍🏼 |
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!