File tree Expand file tree Collapse file tree 2 files changed +59
-0
lines changed
remove-nth-node-from-end-of-list Expand file tree Collapse file tree 2 files changed +59
-0
lines changed Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /*
4+ * 끝에서 n 번째 노드를 제거하는 문제
5+ * 예외 상황이 발생하는 Case를 나눠 문제 해결
6+ * 시간 복잡도 : O(n)
7+ * -> node list를 순회하며 배열에 담는 과정
8+ * 공간 복잡도 : O(n)
9+ * -> 각 node를 담을 list 공간
10+ * */
11+ fun removeNthFromEnd (head : ListNode ? , n : Int ): ListNode ? {
12+ val tempNodeList = mutableListOf<ListNode >()
13+ var currentHead = head
14+ while (currentHead != null ) {
15+ tempNodeList.add(currentHead)
16+ currentHead = currentHead.next
17+ }
18+
19+ val preIndex = tempNodeList.size - n - 1
20+ val postIndex = tempNodeList.size - n + 1
21+
22+ if (preIndex < 0 ) {
23+ if (tempNodeList.size == 1 ) {
24+ return null
25+ }
26+ return tempNodeList[postIndex]
27+ } else if (postIndex == tempNodeList.size) {
28+ tempNodeList[preIndex].next = null
29+ return head
30+ } else {
31+ tempNodeList[preIndex].next = tempNodeList[postIndex]
32+ }
33+ return head
34+ }
Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /* *
4+ * 같은 이진 트리 확인 문제
5+ * 재귀를 사용해 문제 해결
6+ *
7+ * 시간 복잡도: O(n)
8+ * -> 모든 노드를 방문하여 비교 진행
9+ * 공간 복잡도: O(n)
10+ * -> 재귀 호출 횟수 n 회
11+ *
12+ * 재귀 문제를 다룰 때 의식적인 연습
13+ * 1. Base Case(기저 조건)를 명확하게 정의
14+ * 2. 기저 조건으로 주어진 문제에 따라서 탈출 조건 정의
15+ * 3. 작은 문제로 나눠 생각하기
16+ * 4. 작은 문제를 결합하여 정답 도출
17+ */
18+ fun isSameTree (p : TreeNode ? , q : TreeNode ? ): Boolean {
19+ if (p == null && q == null ) return true // 둘 다 null이면 같음
20+ if (p == null || q == null ) return false // 한쪽만 null이면 다름
21+ if (p.`val ` != q.`val `) return false // 값이 다르면 다름
22+
23+ // 왼쪽 서브트리와 오른쪽 서브트리를 각각 재귀적으로 비교
24+ return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
25+ }
You can’t perform that action at this time.
0 commit comments