Skip to content

[WEEK03] 최준호#7

Merged
raejun92 merged 2 commits intomainfrom
raejun
Mar 2, 2026
Merged

[WEEK03] 최준호#7
raejun92 merged 2 commits intomainfrom
raejun

Conversation

@raejun92
Copy link
Collaborator

@raejun92 raejun92 commented Feb 22, 2026

이렇게 풀었어요

1. Linked List Cycle

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

1) 복잡도 계산

시간 복잡도: O(n)


2) 접근 아이디어

  1. 링크드 리스트를 탐색하면서 각 노드의 값을 's'로 바꿔준다.
  2. 만약 이미 's'로 바뀐 노드를 만나면 사이클이 존재하는 것이다.
  3. 끝까지 탐색했는데 's'를 만나지 못하면 사이클이 없는 것이다.

3) 회고

노드의 값을 바꿔주는 방식이 다소 비효율적이긴 하지만, 다른 방법이 생각나지 않아 풀이했다.



2. Implement Queue using Stacks

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

1) 복잡도 계산

시간 복잡도: push, pop, peek, empty 모두 O(1)


2) 접근 아이디어

  1. 링크드 리스트를 이용하여 큐를 구현했다.
  2. push 시 새 노드를 생성하여 연결한다.
  3. pop 시 head를 다음 노드로 이동시키고 값을 반환한다.

3) 회고

링크드 리스트 문제를 풀면서 링크드 리스트로 구현을 하려고 했는데 실패했다.
문제에서 스택을 2개 사용하라고 했는데, 어떻게 스택을 이용해야 하는지 감이 잡히지 않았다.
당연히 Array의 매서드를 사용하면 안될 줄 알았는데 풀이를 보니 Array의 매서드를 사용해서 풀이하였다.



3. Lowest Common Ancestor of a Binary Search Tree

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

1) 복잡도 계산

시간 복잡도: O(n²) — n은 트리의 노드 수


2) 접근 아이디어

  1. q, p의 위치를 찾는 함수와 부모를 찾는 함수를 만든다.
  2. q, p 중 더 깊은 노드를 부모로 이동시킨다.
  3. 두 노드가 같아질 때까지 반복하여 최소 공통 조상을 찾는다.

3) 회고

트리의 자식에서 부모로 가는 방법이 떠오르지 않았다. 그래서 따로 q, p의 위치를 찾고 부모를 찾는 함수를 만들어서 풀이했다.



4. Balanced Binary Tree

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

1) 복잡도 계산

시간 복잡도: O(n) — n은 트리의 노드 수


2) 접근 아이디어

  1. BFS로 트리를 탐색한다.
  2. 각 노드가 왼쪽/오른쪽 어느 서브트리에 속하는지 추적한다.
  3. 왼쪽과 오른쪽의 깊이 차이가 2 이상이면 false를 반환한다.

3) 회고

문제 이해가 잘 안됐다. 왼쪽과 오른쪽 차이가 1이란 게 루트에서 나오는 왼쪽과 오른쪽만 생각했다.
하지만, 트리의 모든 노드에서 왼쪽과 오른쪽 차이가 1이 되어야 한다는 조건으로 내가 푼 풀이에는 문제가 있다.



@github-actions github-actions bot requested review from doitchuu and sik9252 February 22, 2026 12:04
@raejun92 raejun92 changed the title [WEEK03] 최준호 [WEEK03-1] 최준호 Feb 22, 2026
doitchuu
doitchuu previously approved these changes Feb 23, 2026
MyQueue.prototype.empty = function () {
if (this.node === null) return true;
else return false;
};
Copy link
Member

Choose a reason for hiding this comment

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

링크드 리스트로 푸셨군요..!
저도 풀이 과정 힌트 받아가면서 다시 풀어보았는데
아래 풀이도 참고하기 좋은 것 같아 공유드려요

https://leetcode.com/problems/implement-queue-using-stacks/solutions/6750684/video-simple-solution-by-niits-avj8

}

return false;
};
Copy link
Member

Choose a reason for hiding this comment

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

오 값을 바꿔주는 방식도 있군요..!

저는 방문을 체크했는데, 방문 체크 말고도
토끼와 거북이 처럼 2개와 1개(head.next.next와 head.next) 씩 next를 비교하는 방법도 신박했던 거 같아요

@raejun92 raejun92 changed the title [WEEK03-1] 최준호 [WEEK03] 최준호 Feb 28, 2026
@raejun92 raejun92 requested a review from doitchuu February 28, 2026 00:39
* @return {boolean}
*/
MyQueue.prototype.empty = function () {
if (this.node === null) return true;
Copy link
Collaborator

Choose a reason for hiding this comment

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

링크드 리스트로 푸는 방법도 좋지만(?) 지금 코드 구조상 생성자에서 this.node = new ListNode(undefined)로 항상 객체를 만들기 때문에, this.node가 null이 되는 흐름이 없지 않을까요! 그래서 null로는 empty 판단이 안될 수도 있을 것 같아요 (그냥 갑자기 생각난 부분..)

q, p 중 더 높은 위치(더 깊은 노드)에 있는 노드를 부모로 이동시키는 방식으로 풀이했다.

트리의 자식에서 부모로 가는 방법이 떠오르지 않았다. 그래서 따로 q, p의 위치를 찾고 부모를 찾는 함수를 만들어서 풀이했다.
*/
Copy link
Collaborator

Choose a reason for hiding this comment

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

이 문제는 BST이기 때문에, “왼쪽 < root < 오른쪽”이라는 정렬 특성을 활용하면 더 쉽게 풀 수 있을 것 같네용. 저도 이번에 처음 알았지만 p와 q가 둘 다 root보다 작으면 왼쪽으로, 둘 다 크면 오른쪽으로 내려가면 되며, 갈라지는 지점이 LCA가 된다는 특성을 가지고 있대요!

@raejun92 raejun92 merged commit 886d07b into main Mar 2, 2026
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