Skip to content

[WEEK06-1] 이지현#24

Open
sik9252 wants to merge 2 commits intomainfrom
sik9252
Open

[WEEK06-1] 이지현#24
sik9252 wants to merge 2 commits intomainfrom
sik9252

Conversation

@sik9252
Copy link
Collaborator

@sik9252 sik9252 commented Mar 16, 2026

이렇게 풀었어요

1. Middle of the Linked List

  • 문제를 풀었어요.
  • 풀이 시간 : 33분

1) 복잡도 계산

시간 복잡도: O(n)

공간 복잡도: O(1)


2) 접근 아이디어

이 문제는 연결 리스트의 가운데 노드를 반환하는 문제이다. 처음에는 전체 길이를 구한 뒤 다시 한 번 순회하면서 가운데 위치의 노드를 찾는 방법을 떠올렸다. 하지만 이 경우 연결 리스트를 두 번 순회해야 한다.

조금 더 효율적인 방법으로는 slow와 fast 포인터를 사용하는 방식이 있다. slow는 한 번에 한 칸씩 이동하고, fast는 한 번에 두 칸씩 이동하도록 하면 fast가 리스트의 끝에 도달했을 때 slow는 자연스럽게 가운데 노드를 가리키게 된다. 이 방식은 연결 리스트를 한 번만 순회해도 되고, 추가 공간도 사용하지 않아서 효율적이다.

또한 리스트의 길이가 짝수일 경우 가운데 노드가 두 개가 되는데, 이 방식으로 진행하면 문제에서 요구하는 두 번째 가운데 노드를 반환할 수 있다.

즉, 핵심은 fast가 slow보다 2배 빠르게 움직이므로, 끝에 도착할 때 slow는 정확히 중간에 위치한다는 점이다.


3) 회고

이 문제를 통해 slow, fast 포인터를 활용하는 방식이 연결 리스트 문제에서 매우 자주 쓰이는 패턴이라는 점을 다시 느꼈다. 3주차 때 Linked List Cycle 문제 풀이 방식을 보면서 slow, fast 투포인터 방식을 처음 알게 되었는데, 그 때 공부했던 내용 덕분에 아이디어를 떠올릴 수 있었던 것 같다.

추가적으로 다른 풀이로는 리스트를 순회하면서 노드를 배열에 넣고, return arr[Math.floor(arr.length / 2)]; 이렇게 풀이할 수도 있다고한다. 하지만 시간복잡도랑 공간복잡도가 모두 O(n)을 차지하게 된다.


2. Maximum Depth of Binary Tree

  • 문제를 풀었어요.
  • 풀이 시간 : 10분

1) 복잡도 계산

시간 복잡도: O(n)

공간 복잡도: O(n)


2) 접근 아이디어

이 문제는 이진 트리의 최대 깊이를 구하는 문제이다.

트리 문제는 재귀적으로 생각하면 훨씬 단순해진다. 어떤 노드의 최대 깊이는 결국 왼쪽 서브트리의 최대 깊이와 오른쪽 서브트리의 최대 깊이 중 더 큰 값에 현재 노드 1개를 더한 값이다. 따라서 root가 null이면 0을 반환하고, 그렇지 않으면 왼쪽과 오른쪽의 깊이를 각각 재귀적으로 구한 뒤 Math.max(left, right) + 1을 반환하면 된다.

이 방식은 트리의 모든 노드를 한 번씩 방문하면서 자연스럽게 최대 깊이를 계산할 수 있다.


3) 회고

바로 직전에 풀었던 Diameter of Binary Tree가 떠올랐다. DFS로 푼다는 점과 왼쪽 서브트리와 오른쪽 서브트리 결과를 이용해서 값을 계산한다는 점에서 내부 로직 자체는 비슷한 문제인듯하다. 오히려 Diameter 문제가 이 문제의 상위 버전이 아닐까 하는 생각이 들었다. 이 문제는 단순하게 높이만 구하면 되지만, Diameter 문제는 그 높이들을 이용해 가장 긴 경로를 찾아야했기 때문이다.

sik9252 added 2 commits March 16, 2026 19:39
Maximum Depth of Binary Tree 풀이 작성
Copy link
Collaborator

@raejun92 raejun92 left a comment

Choose a reason for hiding this comment

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

여기서 slow, fast를 생각해내다니 정말 대단해요!

Copy link
Contributor

@seulgichu seulgichu left a comment

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants