Conversation
doitchuu
reviewed
Feb 23, 2026
Member
There was a problem hiding this comment.
엇 지현님..! 이 풀이들 이번 주 풀이 아닌 거 같아요 ㅠㅠ
Grid 사이트 세팅이 다르면 문제 순서가 뒤죽박죽이더라구요..!
아마 사이트 그 순서대로 푸신 것 같네욥 ㅠ
정리를 잘해오셔서 저희도 안풀기 아깝네용! 이 문제들을 저랑 준호님이 금요일까지 풀고,
화요일까지 풀어야할 문제들을 이번주 금요일까지 풀어오시는 걸로 할까요?
(저랑 준호님 풀이는 답이니 PR 리뷰는 하지말고 금요일에 리뷰 바꿔하시죠!)
@raejun92 준호님도 참고 부탁드려요!
doitchuu
approved these changes
Feb 27, 2026
| } | ||
|
|
||
| const top = this.stack.pop(); | ||
| const result = this.peek(); |
Member
There was a problem hiding this comment.
재귀를 잘 쓰시는 군요..... 👍
스택 하나로 queue 구현은 이렇게 할 수 있겠네요!
다른 풀이법 하나 참고할 수 있어 좋네요! 💯
Comment on lines
+2
to
+5
| function getHeight(node) { | ||
| if (node === null) return 0; | ||
| return Math.max(getHeight(node.left), getHeight(node.right)) + 1; | ||
| } |
raejun92
approved these changes
Feb 28, 2026
Collaborator
There was a problem hiding this comment.
완벽한 풀이군요! 이런 생각을 할 수 있다는 게 정말 대단한 거 같아요
| var isBalanced = function (root) { | ||
| function getHeight(node) { | ||
| if (node === null) return 0; | ||
| return Math.max(getHeight(node.left), getHeight(node.right)) + 1; |
Collaborator
There was a problem hiding this comment.
와 이런 코드는 어떻게 생각하시는 거죠?! 한 수 배워가요
Collaborator
There was a problem hiding this comment.
오래 걸리시긴해도 풀이가 가능하신 게 넘 부럽습니다.
Member
|
@sik9252 지현님, 해당 PR 머지 부탁드리구, 다른 분들 PR approve 부탁드려욥~! :) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
이렇게 풀었어요
1. Linked List Cycle
1) 복잡도 계산
시간 복잡도: O(n)
공간 복잡도: O(n)
2) 접근 아이디어
단순하게 가장 먼저 떠오른 방법은 LinkedList를 순회하며 현재 지점의 값을 Set을 사용해 저장해둔다. 그리고 포인터를 하나씩 옮겨가며 옮겨진 지점의 값이 이미 이전에 나왔던 값인지 검사한다.
단계별 사고 과정
이 과정에서, 아래와 같이 조건 분기를 하면 된다.
플고 나서 보니, 문제 설명의 하단에 이런 문구가 있었다.
Follow up: Can you solve it using O(1) (i.e. constant) memory?O(1)의 공간 복잡도를 가지게 구현할 수 있는가? 라는 질문인듯 한데, 이를 만족하도록 구현하기 위한 방법인
토끼와 거북이 알고리즘(Slow & Fast Pointer)이란 것이 있다고 한다...3) 회고
모르는 알고리즘이 너무 많다. 언제 다 공부할까?
이렇게 풀었어요
2. Implement Queue using Stacks
1) 복잡도 계산
시간 복잡도
공간 복잡도: O(n)
2) 접근 아이디어
push, empty는 단순하게 stack에 .push()하고, length를 통해 비어있는지 확인하면 된다.
문제는 pop, peek이였는데 Queue는
FIFO구조로 pop하는 경우 가장 처음에 들어간게 가장 먼저 나와야한다. 단순한게 stack[0]을 쓰면 안되나 했는데 문제에You must use only standard operations of a stack, which means only push to top, peek/pop from top, size, and is empty operations are valid.로 stack의 기본 연산만을 사용하라는 조건이 있었다. 그래서 결국 재귀로 구현했다.플고 나서 보니, 문제 설명의 하단에 이번에는
시간복잡도를 O(1)로 구현할 수 있는가?라는 질문이 있었다. 아이디어가 떠오르지 않아 찾아보니 inStack, outStack2개의 stack을 사용하면 된다고 한다. 2개를 쓰면 현재 사용하는 모든 연산(push, pop, peek, empty)를 O(1)로 최적화할 수 있다.3) 회고
stack의 기본 연산만 사용하라고해서 pop 구현하는데 아이디어가 안떠올랐다. 근데 stack을 2개 사용하는 방법은 어떻게 떠올리는거지? 처음 문제를 보자마자 떠올리면 천재겠지..
1. Lowest Common Ancestor of a Binary Search Tree
1) 복잡도 계산
시간 복잡도: O(n)
공간 복잡도: O(1)
2) 접근 아이디어
Binary Search Tree가 주어지고, 두 노드 p/q가 주어진다. 이때 이 둘(p/q)의 가장 가까운 공통 조상을 찾는 문제다.
BST는 각 노드가
왼쪽 서브트리 < 현재 노드 < 오른쪽 서브트리라는 특징을 가지고 있다.따라서 이 성질을 이용하면 일반 이진트리처럼 전체를 탐색할 필요 없이 p와 q가 갈라지는 지점을 따라 내려가며 LCA를 찾을 수 있다.
단계별 사고 과정
경우 1) high < cur.val 인 경우
경우 2) low > cur.val 인 경우
경우 3) 그 외의 경우 (low <= cur.val <= high)
3) 회고
그냥 트리도 잘 모르는데 BST의 최소 공통 조상을 어떻게 찾아야 되는가에 대한 아이디어가 딱 떠오르지 않았다. 그래서 공부를 먼저 해본 결과 BST는 일반 이진트리와 다르게 정렬 특성을 가지고 있으며, 이 특성에 의해 매 단계마다 탐색 범위를 한쪽 서브트리로 확정할 수 있다는 것을 알게 되었다. (즉, p와 q가 같은 방향에 있으면 안되고, 서로 다른 방향으로 갈라지는 순간의 노드가 LCA다.) 근데 사실 아직도 어렵다. 일단 제출하고 다시 깊게 파볼 생각이다.
2. Balanced Binary Tree
1) 복잡도 계산
시간 복잡도: O(n²)
공간 복잡도: O(1)
2) 접근 아이디어
균형 트리란?
모든 노드에서 왼쪽 서브트리와 오른쪽 서브트리의 높이 차이가 1 이하인 트리
즉, 이 조건을 만족하면 true 아니면 false를 반환하는 문제이다.
단계별 사고 과정
각 노드에서 균형 여부를 판단하려면 왼쪽/오른쪽 서브트리의 높이가 필요하다.
높이를 구하기 위해 getHeight 함수를 만든다.
check 함수에서 현재 노드 기준으로 아래 항목을 계산한다.
|leftH - rightH| > 1이면 현재 노드는 불균형이므로 false를 반환한다.
현재 노드가 균형이라도, “모든 노드가 균형이어야” 하므로
check(node.left)와 check(node.right)도 모두 true인지 확인한다.
루트부터 check(root)를 호출해 최종 결과를 반환한다.
3) 회고
처음엔 “각 노드에서 높이를 구해서 차이를 비교하면 되겠다”라고 생각해서 위처럼 구현했다.
로직은 직관적이지만, check를 도는 과정에서 getHeight가 계속 중복 호출되어 비효율적일 수 있다는 점을 알게 되었다. -> O(n²)까지 커질 수 있음
그래서 다음 최적화 아이디어도 같이 공부해봤다.
개선 지점
(1) “높이 계산”과 “균형 체크”를 한 DFS에서 결합하자
현재 구현은 check가 높이를 필요로 할 때마다 getHeight를 별도로 호출한다.
별도 호출 대신 DFS 한 번으로:
이걸 한 번에 처리하면 중복 방문이 사라져 O(n)으로 개선된다.
(2) 불균형을 발견하면 -1로 조기 종료할 수 있다는 점
DFS 함수가 높이를 반환하되,
이 방식은 중복 계산을 없애서 시간 복잡도를 O(n)으로 줄일 수 있고, 불균형을 빨리 찾으면 더 빠르게 종료할 수 있다는 점이 장점이다.