[parkhojeong] WEEK 03 Solutions#2727
Conversation
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Backtracking, Depth-First Search, Greedy
- 설명: DFS로 모든 조합을 탐색하며 후보를 재귀적으로 시도하는 백트래킹 형태의 풀이입니다. 목표 합에 맞는 조합을 찾고, 후보를 점진적으로 축소해 불필요한 경로를 제거합니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(k * d^k) |
| Space | O(k) |
피드백: 정확히는 각 재귀에서 남은 후보군의 길이에 비례하여 탐색이 늘어나며 중복 제거를 위해 정렬 및 증가하는 방향으로 탐색한다.
개선 제안: 현재 구현은 불필요한 중복 분기를 줄이고, 가지치기와 메모이제이션을 도입하면 속도가 개선될 여지가 있습니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
📊 parkhojeong 님의 학습 현황이번 주 제출 문제
누적 학습 요약
문제 풀이 현황
🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다. 🔢 API 사용량 (gpt-5-nano)
|
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming, Greedy, Hash Map / Hash Set
- 설명: 코드는 문자열을 분리해 부분 문제로 나누고 각 부분에 대해 카운트를 곱하는 방식으로 풀이합니다. 부분 문제를 합치며 최댓값/경우의 수를 누적하는 DP 특성과, 0 처리 시 예외를 조기에 판단하는 점에서 Greedy 성향도 보입니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(1) |
피드백: 0 처리와 구간 분할 로직이 꼼꼼하지만, 동적계획법으로 한 번에 해결하는 방법이 더 명확하고 안전하다.
개선 제안: 현재 구현 대신 DP 1차원 배열로 피연산자별 경우의 수를 누적하는 방식으로 구현을 정리하는 것을 고려해볼 만합니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Dynamic Programming, Two Pointers, Sliding Window
- 설명: 코드는 부분배열의 합의 최댓값을 구하려고 여러 구간을 합치며 누적합을 갱신하는 흐름이 있으며, 배열의 연속 구간 합을 이용해 최댓값을 찾는 구조가 담겨 있습니다. 또한 일부 연산에서 각 인덱스의 합을 바로 계산해 다음 위치로 전달하는 방식이 패턴과 맞닿아 있습니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(n) |
피드백: 처음 구현은 모든 값의 최댓값을 추적한 뒤 부분 구간을 분해하는 방식으로 시작하고, 이후 불필요한 연산이 있다.
개선 제안: 불필요한 0 제거와 복잡한 배열 재구성을 제거하고 Kadane의 간단한 형태로 재구현하는 것이 좋습니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Bit Manipulation
- 설명: 주어진 코드는 정수의 이진 표현에서 1의 개수를 세는 연산으로, 비트 관련 연산을 직접 다루는 Bit Manipulation 패턴의 대표 예시입니다. while 루프를 이용해 각 비트를 확인하고 1의 개수를 누적합니다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(k) |
| Space | O(1) |
피드백: 루프가 n 비트에 대해 실행되므로 입력 정수의 비트 길이에 비례한다.
개선 제안: n & (n-1) 기법으로 1비트를 제거하며 반복 횟수를 비트 수만큼 줄일 수 있습니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
There was a problem hiding this comment.
🏷️ 알고리즘 패턴 분석
- 패턴: Two Pointers, Hash Map / Hash Set
- 설명: 문자열을 정규화한 뒤 양쪽에서 비교하는 방식으로 대칭 여부를 확인한다. 명시적 포인터 두 개로 순회하는 것은 아니지만, 두 끝에서 비교하는 아이디어와 역순과의 비교로 Palindrome 판단 패턴에 해당한다.
📊 시간/공간 복잡도 분석
| 복잡도 | |
|---|---|
| Time | O(n) |
| Space | O(n) |
피드백: 대소문자 무시 및 비알파벳 제거에 초점을 맞춘 간단한 전처리 구현이다.
개선 제안: 공간을 절약하려면 투 포인터를 사용해 양쪽에서 직접 비교하는 방식으로 전처리 문자열을 제거하지 않고 구현하는 것이 좋습니다.
💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!
| j = i + 1 | ||
| elif s[i] == "0": | ||
| splited_arr.append(s[i + 1:j]) | ||
| i -= 2 |
There was a problem hiding this comment.
0이 들어가는 경우를 먼저 나누고 문자열을 구간별로 분리해서 경우의 수를 계산하신 흐름을 잘 봤습니다! 제가 생각한 DP 방식과 달라서 이런 식으로도 풀 수 있다는 걸 배웠어요!
There was a problem hiding this comment.
조건 중에 0이 중요한 부분이더라구요. 0을 기준으로 입력 값을 쪼개준 뒤, 각 경우의 수를 구해 곱해주도록 해보았습니다 :)
dp 방식은 생각 못헀는데 풀어주신 거 보고 배울 수 있었습니다!
| arr[-2] = arr[-1] + arr[-2] | ||
| arr = arr[:-1] | ||
|
|
||
| max_val = max(max_val, arr[0]) |
There was a problem hiding this comment.
연속된 양수와 음수를 먼저 묶은 다음 양쪽 구간을 합쳐가며 최댓값을 찾으셨네요! 제가 풀었던 점화식 방식과 달라서 코드를 따라가며 비교해볼 수 있었습니다!
There was a problem hiding this comment.
연속된 합에 대한 문제라 + - + - + - ... 형태로 데이터를 정리를 먼저 해봤어요. 이후 최대값을 그리디 방식으로 구하는 걸로 해결해봤습니다 :)
JAEKWANG97
left a comment
There was a problem hiding this comment.
전체적으로 잘 봤습니다! 문제마다 풀이 흐름이 잘 드러나서 코드를 따라가기 좋았습니다! 특히 Decode Ways와 Maximum Subarray는 제가 풀었던 방식과 달라서 다른 접근을 배울 수 있었습니다! 수고하셨습니다!
답안 제출 문제
작성자 체크 리스트
In Review로 설정해주세요.검토자 체크 리스트
Important
본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!