Skip to content

[gyeo-ri] WEEK 10 Solutions#2591

Open
gyeo-ri wants to merge 3 commits intoDaleStudy:mainfrom
gyeo-ri:main
Open

[gyeo-ri] WEEK 10 Solutions#2591
gyeo-ri wants to merge 3 commits intoDaleStudy:mainfrom
gyeo-ri:main

Conversation

@gyeo-ri
Copy link
Copy Markdown
Contributor

@gyeo-ri gyeo-ri commented May 8, 2026

답안 제출 문제

작성자 체크 리스트

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

검토자 체크 리스트

Important

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

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

gyeo-ri added 2 commits May 8, 2026 16:33
* feat: 테스트 코드 작성

* feat: 위상정렬 풀이

* fix: 불필요한 코드 제거

* feat: dfs를 활용한 풀이

* fix: 결과 설명 추가

* fix: dfs 코드 가독성 개선
@dalestudy
Copy link
Copy Markdown
Contributor

dalestudy Bot commented May 8, 2026

📊 gyeo-ri 님의 학습 현황

이번 주 제출 문제

문제 난이도 유형 분석
course-schedule Medium ✅ 의도한 유형
invert-binary-tree Easy ✅ 의도한 유형

누적 학습 요약

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

문제 풀이 현황

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

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

🔢 API 사용량 (gpt-4.1-nano)
요청 입력 토큰 출력 토큰 합계 비용
1 1,189 34 1,223 $0.000133
2 2,238 67 2,305 $0.000251
합계 3,427 101 3,528 $0.000383

* feat: 테스트 코드 작성

* feat: dfs를 활용한 풀이

* fix: 노드 교환 로직 가독성 개선

* docs: dfs 풀이 과정 리뷰

* feat: bfs를 활용한 풀이

* fix: 노드가 None인 경우 큐에 넣기 전에 처리함

* docs: 3번 풀이 코멘트 추가
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.

🏷️ 알고리즘 패턴 분석

  • 패턴: DFS, Topological Sort
  • 설명: 이 코드는 그래프의 순환 여부를 판단하기 위해 DFS와 위상 정렬 방식을 활용합니다. 두 방법 모두 그래프 탐색과 정렬을 통해 문제를 해결하는 대표적인 패턴입니다.

📊 시간/공간 복잡도 분석

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

풀이 1: Solution.canFinish — Time: O(V + E) / Space: O(V + E)
복잡도
Time O(V + E)
Space O(V + E)

피드백: 그래프의 노드와 간선 수에 비례하는 시간과 공간 복잡도를 가지며, 모든 노드와 간선을 한 번씩 탐색하는 방식입니다.

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

풀이 2: Solution.canFinish — Time: O(V + E) / Space: O(V + E)
복잡도
Time O(V + E)
Space O(V + E)

피드백: 그래프의 노드와 간선 수에 비례하는 시간과 공간 복잡도를 가지며, 모든 노드를 한 번씩 처리하는 방식입니다.

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

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

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.

🏷️ 알고리즘 패턴 분석

  • 패턴: DFS, BFS
  • 설명: 이 코드는 재귀적 DFS와 반복적 BFS 두 가지 방법으로 이진 트리의 노드 값을 뒤집는 방식을 사용합니다. 각각의 방법은 트리 전체를 순회하며 노드의 좌우를 교환하는 특징이 있습니다.

📊 시간/공간 복잡도 분석

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

풀이 1: Solution.invertTree — Time: O(n) / Space: O(n)
복잡도
Time O(n)
Space O(n)

피드백: 모든 노드를 한 번씩 방문하며 좌우를 교환하므로 시간 복잡도는 트리의 노드 수에 비례하며, 큐에 저장되는 노드 수는 최대 트리 높이와 관련됩니다.

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

풀이 2: Solution.invertTree — Time: O(n) / Space: O(h)
복잡도
Time O(n)
Space O(h)

피드백: 모든 노드를 한 번씩 방문하며 좌우를 교환하므로 시간 복잡도는 트리의 노드 수에 비례하며, 재귀 호출 스택은 트리의 높이만큼 공간을 사용합니다.

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

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

@gyeo-ri gyeo-ri moved this from Solving to In Review in 리트코드 스터디 7기 May 8, 2026
@reeseo3o reeseo3o self-requested a review May 9, 2026 05:47
Copy link
Copy Markdown
Contributor

@reeseo3o reeseo3o left a comment

Choose a reason for hiding this comment

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

이번 한 주도 고생많으셨습니다!

Comment on lines +2 to +12
[결과 요약]
# 시도한 로직 수: 2
1. 위상 정렬로 푸는 방법
- 시간복잡도 O(n) / 공간복잡도 O(n)
- 실제로는 numCourses + len(prerequisites) 만큼의 복잡도 (O(V+E))
- 원리: 모든 노드를 정렬할 수 있는지 체크(순환이 있으면 모든 노드 정렬 불가)
2. DFS를 활용하는 방법
- 1번과 동일하게 O(V+E)
- 원리: 탐색(비순환일때만 가능)을 완료할 수 있는지 체크해서 순환 여부를 판단

"""
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.

어떤 아이디어를 시도했고, 풀이와 원리를 잘 설명해주셔서 좋았어요!

class Solution:
def canFinish(self, numCourses: int, prerequisites: list[list[int]]) -> bool:
# 1-a. 인덱스가 0부터 시작하는 그래프 초기화
course_graph: list[list[int]] = [[] for _ in range(numCourses)]
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 __name__ == "__main__":
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.

테스트 케이스 👍 👍

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.

2 participants