본문 바로가기

분류 전체보기147

[LeetCode] 886. Possible Bipartition [JAVA(자바)] '기술면접 라이브코딩 - 승지니어'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 () N명의 사람을 두 그룹으로 나눈다. Dislikes[i] = [a,b] 일 때, a 와 b 는 서로 다른 그룹이어야 한다. Input: N = 4, dislikes = [[1,2],[1,3],[2,4]] Output: true Explanation: group1 [1,4], group2 [2,3] Input: N = 3, dislikes = [[1,2],[1,3],[2,3]] Output: false 2. 풀이 이분그래프 와 DFS 를 이용한 풀이 이분그래프를 통해 N명의 사람을 2개의 그룹으로 나눈다. DFS 를 통해 dislikes한 사람을 모두 다른 그룹(true/false)으로 보낸다. visi.. 2021. 11. 24.
[LeetCode] 218. The Skyline Problem [JAVA(자바)] '기술면접 라이브코딩 - 승지니어'를 보고 작성한 글입니다. 😀 문제 👉 1. 문제 빌딩의 좌표가 주어졌을 때, 모든 빌딩이 형성하는 실루엣의 바깥 쪽 윤곽점을 나타내어라. Input: buildings = [[2,9,10],[3,7,15],[5,12,12],[15,20,10],[19,24,8]] Output: [[2,10],[3,15],[7,12],[12,0],[15,10],[20,8],[24,0]] 2. 풀이 Sort 와 TreeMap 을 이용한 풀이 빌딩을 2개의 Line으로 나눈다. 빌딩의 왼쪽과 오른쪽을 구분하기 위해 왼쪽은 높이에 마이너스를 붙인다. (-height) (left, -height), (right, height) List lines = new ArrayList(bui.. 2021. 11. 24.
[LeetCode] 876. Middle of the Linked List [JAVA(자바)] 문제 👉 1. 문제 (링크드리스트의 중간) 링크드리스트의 중간을 반환하라. Input: [1,2,3,4,5] Output: Node 3 from this list (Serialization: [3,4,5]) The returned node has value 3. (The judge's serialization of this node is [3,4,5]). Note that we returned a ListNode object ans, such that: ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL. Input: [1,2,3,4,5,6] Output: Node 4 from this list (S.. 2021. 11. 24.
[LeetCode] 589. N-ary Tree Preorder Traversal [JAVA(자바)] 문제 👉 1. 문제 n 항 트리의 루트가 주어지면 노드 값의 사전 순회(Preorder)를 반환합니다. Input: root = [1,null,3,2,4,null,5,6] Output: [1,3,5,6,2,4] Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14] Output: [1,2,3,6,7,11,14,4,8,12,5,9,13,10] 2. 풀이 preorder 를 이용한 풀이 self -> children 3. 코드 /* // Definition for a Node. class Node { public int val; public List children; public.. 2021. 11. 24.
[LeetCode] 530. Minimum Absolute Difference in BST [JAVA(자바)] 문제 👉 1. 문제 (BST의 최소 절대 차이) 이진 검색 트리 (BST)의 루트가 주어지면 트리에 있는 두 개의 서로 다른 노드 값 간의 최소 절대 차이를 반환합니다. Input: root = [4,2,6,1,3] Output: 1 Input: root = [1,0,48,null,null,12,49] Output: 1 2. 풀이 이진검색트리 - inorder 를 이용한 풀이 이진 검색 트리의 inorder -> 오름차순 정렬이 됨! 트리 순회 preorder : self -> left -> right inorder : left -> self -> right postorder : left -> right -> self 3. 코드 class Solution { int minValue, preValue; b.. 2021. 11. 24.
[LeetCode] 461. Hamming Distance [JAVA(자바)] 문제 👉 1. 문제 (Hamming Distance (XOR)) 두 정수 사이의 해밍 거리는 해당 비트가 다른 위치의 수입니다. 두 개의 정수 x와 y가 주어지면 그 사이의 해밍 거리를 반환합니다. Input: x = 1, y = 4 Output: 2 Explanation: 1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑2. 풀이 비트 연산 을 이용한 풀이 AND (&) : 두 비트가 모두 1이면 1, 아니면 0 OR (|) : 두 비트중 하나라도 1이면 1, 아니면 0 XOR (^) : 두 비트가 다르면 1, 아니면 0 Int 는 4bit (4*8 = 32 bytes) 이므로 32자리까지의 비트를 확인한다. 3. 코드 class Solution { public int hammingDistance(in.. 2021. 11. 24.
[LeetCode] 107. Binary Tree Level Order Traversal II [JAVA(자바)] 문제 👉 1. 문제 (Binary Tree Level Order) 이진 트리의 루트가 주어지면 노드 값의 상향식(bottom-up) 순서 순회를 반환합니다. (i.e., from left to right, level by level from leaf to root) Input: root = [3,9,20,null,null,15,7] Output: [[15,7],[9,20],[3]]2. 풀이 BFS 를 이용한 풀이 Queue 에서 노드를 순서대로 꺼내 list 에 추가한다. Queue 에 left, right 순서로 자식 노드를 추가한다. Bottom-up 순서로 출력하기 위해 각 층을 나타나내는 list를 ret의 0번 인덱스에 추가한다. 3. 코드 /** * Definition for a binary .. 2021. 11. 24.
[LeetCode] 94. Binary Tree Inorder Traversal [JAVA(자바)] 문제 👉 1. 문제 이진 트리의 루트가 주어지면 노드 값의 순회 순회를 반환합니다. Input: root = [1,null,2,3] Output: [1,3,2]2. 풀이 Inorder : left -> self -> right 3. 코드 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * thi.. 2021. 11. 24.
[LeetCode] 70. Climbing Stairs [JAVA(자바)] 문제 👉 1. 문제 (계단 오르기) 계단을 매번 1개 혹은 2개를 오를 수 있을 때, 계단을 오르는 방법은 몇개인가? Input: n = 3 Output: 3 Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step2. 풀이 다이나믹 프로그래밍 (DP) 을 이용한 풀이 피보나치 수열 (단순 재귀 함수) f(n) = f(n-1) + f(n-2) f(5) = f(4) + f(3) -> 재귀함수를 통해 반복적인 연산 수행 f(4) = f(4) + f(2) f(3) = f(2) + f(1) f(5)를 구하기 위해 이전에 연산을 했던 f(4), f(3).. 2021. 11. 24.