Skip to content

[yuseok89] WEEK 06 Solutions - #2786

Open
yuseok89 wants to merge 6 commits into
DaleStudy:mainfrom
yuseok89:main
Open

[yuseok89] WEEK 06 Solutions#2786
yuseok89 wants to merge 6 commits into
DaleStudy:mainfrom
yuseok89:main

Conversation

@yuseok89

@yuseok89 yuseok89 commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

답안 제출 문제

작성자 체크 리스트

  • Projects의 오른쪽 버튼(▼)을 눌러 확장한 뒤, Week를 현재 주차로 설정해주세요.
  • 문제를 모두 푸시면 프로젝트에서 StatusIn Review로 설정해주세요.
  • 코드 검토자 1분 이상으로부터 승인을 받으셨다면 PR을 병합해주세요.

검토자 체크 리스트

Important

본인 답안 제출 뿐만 아니라 다른 분 PR 하나 이상을 반드시 검토를 해주셔야 합니다!

  • 바로 이전에 올라온 PR에 본인을 코드 리뷰어로 추가해주세요.
  • 본인이 검토해야하는 PR의 답안 코드에 피드백을 주세요.
  • 토요일 전까지 PR을 병합할 수 있도록 승인해주세요.

@yuseok89 yuseok89 self-assigned this Jul 31, 2026
@github-actions github-actions Bot added the py label Jul 31, 2026
@dalestudy

dalestudy Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

📊 yuseok89 님의 학습 현황

이번 주 제출 문제

문제 난이도 유형 분석
container-with-most-water Medium ✅ 의도한 유형
design-add-and-search-words-data-structure Medium ✅ 의도한 유형
longest-increasing-subsequence Medium ✅ 의도한 유형
spiral-matrix Medium ✅ 의도한 유형
valid-parentheses Easy ✅ 의도한 유형

누적 학습 요약

  • 풀이한 문제: 24 / 75개
  • 이번 주 유형 일치율: 100% (5문제 중 5문제 일치)

문제 풀이 현황

카테고리 진행도 완료
Array ■■■■■□□ 7 / 10 (Medium 4, Easy 3)
Dynamic Programming ■■■■□□□ 6 / 11 (Easy 1, Medium 5)
Heap ■■□□□□□ 1 / 3 (Medium 1)
String ■■□□□□□ 3 / 10 (Medium 1, Easy 2)
Matrix ■■□□□□□ 1 / 4 (Medium 1)
Tree ■■□□□□□ 3 / 14 (Medium 2, Easy 1)
Binary ■□□□□□□ 1 / 5 (Easy 1)
Linked List ■□□□□□□ 1 / 6 (Easy 1)
Graph ■□□□□□□ 1 / 8 (Medium 1)
Interval □□□□□□□ 0 / 5 ← 아직 시작 안 함

🤖 이 댓글은 GitHub App을 통해 자동으로 작성되었습니다.

🔢 API 사용량 (gpt-5-nano)
요청 입력 토큰 출력 토큰 합계 비용
1 313 56 369 $0.000038
2 313 37 350 $0.000030
3 1,760 200 1,960 $0.000168
4 1,726 198 1,924 $0.000166
5 1,726 251 1,977 $0.000187
합계 5,838 742 6,580 $0.000589

@yuseok89
yuseok89 marked this pull request as ready for review July 31, 2026 13:46

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Two Pointers, Greedy
  • 설명: 두 포인터를 양쪽 끝에서 모아가며 넓이를 계산하고, 현 시점의 최적 값을 빠르게 판단하여 불필요한 탐색을 중단하는 방식으로 문제를 해결합니다. 최소 높이와 거리의 곱을 비교하며 포인터를 움직이는 점이 그리디 패턴과 부합합니다.

📊 시간/공간 복잡도 분석

ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.

풀이 1: Solution.maxArea — Time: ✅ O(N) → O(n) / Space: ✅ O(1) → O(1)
유저 분석 실제 분석 결과
Time O(N) O(n)
Space O(1) O(1)

피드백: 투 포인터를 사용해 최댓값을 갱신하고, 더 큰 높이를 가진 쪽으로 이동시키는 방식으로 중복 계산을 피한다.

개선 제안: 현재 구현이 적절해 보입니다.

풀이 2: maxArea — Time: ✅ O(N) → O(n) / Space: ✅ O(1) → O(1)
유저 분석 실제 분석 결과
Time O(N) O(n)
Space O(1) O(1)

피드백: 좌우 포인터를 한 번씩만 이동하여 전체 배열을 한 번 스캔한다.

개선 제안: 현재 구현이 적절해 보입니다.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Trie, Backtracking
  • 설명: 트라이를 이용해 단어를 저장하고 검색하며, 점(.) 와일드를 재귀적으로 탐색하는 방식은 트라이 구조와 백트래킹(재귀 탐색) 패턴의 결합으로 볼 수 있습니다.

📊 시간/공간 복잡도 분석

ℹ️ 이 파일에는 2가지 풀이가 포함되어 있어 각각 분석합니다.

풀이 1: WordDictionary.addWord — Time: O(k) / Space: O(total_nodes)
복잡도
Time O(k)
Space O(total_nodes)

피드백: 트라이 노드에 딕셔너리 기반 자식과 끝 표식을 사용해 검색을 빠르게 한다.

개선 제안: 현재 구현이 적절해 보입니다.

풀이 2: WordDictionary.search — Time: O(질문 문자열 길이) / Space: O(트리 깊이)
복잡도
Time O(질문 문자열 길이)
Space O(트리 깊이)

피드백: 점진적으로 트라이를 따라가며 부분 매치를 탐색한다. 와일드카드 처리에 재귀를 사용한다.

개선 제안: 현재 구현이 적절해 보입니다.

💡 풀이에 시간/공간 복잡도를 주석으로 남겨보세요!

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Binary Search, Dynamic Programming
  • 설명: 최장 증가 부분수열의 길이를 이분 탐색으로 관리하는 패턴으로, 기존 수열의 증가 부분수열 끝값을 배열에 유지하고 수를 삽입할 위치를 이분 탐색으로 찾는 방식이다. DP적 아이디어를 이분 탐색으로 최적화한 대표 사례다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(NlogN) O(n log n)
Space O(N) O(n)

피드백: tail 배열을 관리하며 각 원소를 적절한 위치에 대입한다.

개선 제안: 현재 구현이 적절해 보입니다.

Comment thread spiral-matrix/yuseok89.py

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Two Pointers, Matrix Traversal
  • 설명: 주어진 코드는 행렬을 시계 방향으로 한 바퀴씩 순회하며 원소를 수집합니다. 두 포인터(행/열)와 방향 전환을 이용한 순회 방식으로 패턴을 확인할 수 있습니다. 정확히는 공식 패턴 목록에 직접 대응하는 항목은 많지 않지만, Two Pointers와 Sliding Window의 아이디어에 해당하는 매 트레버셜 구조를 갖습니다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(N*M) O(n*m)
Space O(N*M) O(1)

피드백: 방향 전환과 경계 관리로 전체 원소를 한 번 순회한다.

개선 제안: 현재 구현이 적절해 보입니다.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Stack / Hash Map, Greedy, Hash Map / Hash Set
  • 설명: 괄호 짝을 스택에 쌓아 올리며 매칭 여부를 확인하는 전형적인 스택 패턴이다. 해시 맵으로 괄호 매핑 정보를 관리하고, 매 입력 문자에 대해 현재 스택의 최상단과 비교하여 유효성을 판단한다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(N) O(n)
Space O(N/2) O(n)

피드백: 여는 괄호를 스택에 push하고 닫는 괄호와 매칭 여부를 확인한다.

개선 제안: 현재 구현이 적절해 보입니다.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

제 생각에 너무 좋은 코드인데요, Python의 타입 힌팅을 적극적으로 이제 활용해 보시면 코드의 가독성에 큰 긍정적 영향을 줄것이라고 생각해요!
특히 메서드를 추가 작성할때 input param들의 타입과 return type을 작성하면 개인적으로는 상당한 가독성의 향상이 있다고 생각합니다.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 물론 개인적 의견이니 꼭 하실 필요는 없습니다!!!

Comment thread spiral-matrix/yuseok89.py

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

와 이건 코드를 아트의 경지로 올리셨군요 ㄷㄷㄷ 대단하십니다.
배우고 갑니다!

if c in pars:
stack.append(c)
else:
if len(stack) == 0 or pars.get(stack.pop(), '') != c:

@alphaorderly alphaorderly Jul 31, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if not stack or pars[stack.pop()] != c:
제 개인적인 생각으로는 이것으로 수정하면

  1. not stack 을 통해 스택이 비어있는 경우를 먼저 확인

단축 평가에 의해 stack이 비어 있으면 False를 리턴하기에 or의 뒤에 있는 부분은 실행시 stack에 값이 있음이 확실시 됩니다!

  1. pars[stack.pop()] != c

이부분은 stack에 값이 있음이 확실시 되고, 어차피 닫는 기호는 스택에 들어가지 않기 때문에 스택 내부에는 여는 기호만 있는것이 확실시 되기 때문에 get과 기본값을 명시하는것이 크게 필요하지 않다는 생각이 들었습니다.

@alphaorderly alphaorderly left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전반적으로 깔끔한 풀이 잘 봤습니다!

@njngwn
njngwn self-requested a review July 31, 2026 18:08
Comment thread spiral-matrix/yuseok89.py
# TC: O(N*M)
# SC: O(N*M)
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

진짜 깔끔하게 푸셨네요. 리뷰하러 왔다가 배워갑니다..!!!

else:
r -= 1

return ans;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

파이썬이니까 세미콜론은 없어도 될 것 같습니다 😄

@@ -0,0 +1,16 @@
# TC: O(N)
# SC: O(N/2)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공간복잡도를 O(N/2) 라고 생각하신 이유가 있을까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: In Review

Development

Successfully merging this pull request may close these issues.

3 participants