π¨π»π» PS/LeetCode 150
[Java] 909. Snakes and Ladders
λ¬Έμ νμ Boustrophedon μ€νμΌμ n*n 보λκ° μ£Όμ΄μ§λ€. ( (n-1,0) μ’νμμ μμνλ€. ) μ£Όμ¬μμ λ°λΌ μ΅λ 6μΉΈμ μ΄λν μ μλ€. λ§μ½ λ±μ΄λ μ¬λ€λ¦¬λ₯Ό λ§λλ©΄ λ±μ΄λ μ¬λ€λ¦¬λ₯Ό μ΄μ©ν΄μΌνλ€. n^2 μΉΈμ λλ¬νμ λ, κ²μμ λλλ€. 보λ κ°μ΄ -1μ΄ μλ κ²½μ° λ±μ΄λ μ¬λ€λ¦¬κ° μ‘΄μ¬νλ€. λ±μ΄λ μ¬λ€λ¦¬μΈ κ²½μ° λμ°©νλ 보λ κ°μ΄ κΈ°λ‘λμ΄μλ€. λ±μ΄λ μ¬λ€λ¦¬λ 1 λλ n^2 μΉΈμ μ‘΄μ¬νμ§ μκ³ μ°μμΌλ‘ μ΄λν μ μλ€. n^2μ λλ¬νκΈ° μν μ΅μ μ΄λ νμλ₯Ό λ°ννκ³ , λλ¬νμ§ λͺ»νλ©΄ -1μ λ°ννλ€. νμ΄ 1οΈβ£ 1μ°¨μ 맡과 bfs λ₯Ό μ΄μ©ν λ°©λ² π‘ λ μ€λ₯Έ Idea λ¨Όμ , 보λν μμκ° ν·κ°λ €μ μ΄λ₯Ό 1μ°¨μ 맡μΌλ‘ λ°κΏμ ν΄κ²°νλ©΄ κ°λ¨ν κ²μ΄λΌ μκ°μ΄ λ€μλ€. λ°λΌμ, μ μΌ μ..
[Java] 133. Clone Graph
λ¬Έμ νμ λ Έλλ‘ μ°κ²°λ κ·Έλνκ° μ£Όμ΄μ§κ³ , ν΄λΉ κ·Έλνλ₯Ό κΉμ 볡μ¬ν΄μ λ°νν΄μΌνλ€. νμ΄ 1οΈβ£ bfs λ₯Ό μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea κΉμ 볡μ¬λ₯Ό νκΈ° μν΄μλ μ΄μ©λ , λͺ¨λ λ Έλμ λ°©λ¬Έν΄λ³΄κ³ ν΄λΉ κ°μ κ°λ μλ‘μ΄ λ Έλλ₯Ό μμ±ν΄μΌνλ€. λ¬Έμ μμ val κ°μ unique νλ€κ³ νμΌλ―λ‘ mapμ val μ ν€κ°μΌλ‘ ν΄μ λ Έλλ₯Ό μ°Έμ‘°ν΄μ€λ€. 첫λ²μ§Έ λ ΈλλΆν° μ΄μ λ Έλλ€μ λ°©λ¬Έν΄λ³΄κ³ , mapμ λ€μ΄μμ§ μμ(μμ§ λ°©λ¬Ένμ§ μμ) λ Έλλ€μ νμ μ§μ΄λ£μ΄ μ΄μ λ Έλλ€μ λ°©λ¬ΈνκΈ°λ₯Ό λ°λ³΅νλ€. λ§μ½ mapμ λ€μ΄μλ(λ°©λ¬Ένλ) λ ΈλλΌλ©΄ νμ λ£μ§ μκ³ μ΄μμΌλ‘μ μΆκ°λ§ ν΄μ€λ€. class Solution { Map map = new HashMap(); Queue q = new LinkedList(); pu..
[Java] 373. Find K Pairs with Smallest Sums
λ¬Έμ νμ λΉ λ΄λ¦Όμ°¨μμΈ λ μ μ λ°°μ΄ nums1 κ³Ό nums2 κ·Έλ¦¬κ³ kκ° μ£Όμ΄μ§λ€. kκ°μ κ°μ₯ ν©μ΄ μμ pair λ₯Ό λ°νν΄μΌνλ€. νμ΄ 1οΈβ£ PriortyQueue μ μΌμ’ μ 그리λ λ²μ νμ© π‘ μ°Έκ³ ν Idea μ΄λ² λ¬Έμ λ, μ무리 μ΄μ¬ν λ μ¬λ €λ΄λ μκ° μ΄κ³Ό & λ©λͺ¨λ¦¬ μ΄κ³Ό λλ¬Έμ ν΄κ²°νμ§ λͺ»νκ³ λ€λ₯Έ μ¬λμ μμ΄λμ΄λ₯Ό μ°Έκ³ νμ¬ ν΄κ²°νμλ€. ν΅μ¬ μμ΄λμ΄λ λ€μκ³Ό κ°λ€. λ¨Όμ , λ μμμ ν©μ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ μ°μ μμ νλ₯Ό μ€λΉνλ€. nums1 λ°°μ΄μ μΈλ±μ€λ 0 μΌλ‘ κ³ μ ν μ±, nums2 λ°°μ΄μ μννλ©° ν©μ ꡬνκ³ μ°μ μμ νμ μ λ ₯νλ€. μ°μ μμ νμλ [ nums1μ κ°, nums2 μ κ°, nums1μ μΈλ±μ€, nums1μ κ° +nums2μ κ° ] μΌλ‘ μ λ ₯ν΄μ€λ€. ..
[Java] 215. Kth Largest Element in an Array
λ¬Έμ νμ μ μ λ°°μ΄ nums κ° μ£Όμ΄μ§κ³ kκ° μ£Όμ΄μ§λ€. kλ²μ§Έλ‘ ν° μμλ₯Ό λ°ννλ©΄ λλ€. νμ΄ 1οΈβ£ PriorityQueueλ₯Ό νμ©ν νμ΄ π‘ λ μ€λ₯Έ Idea λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ μ°μ μμνμ μμλ€μ λ£κ³ kλ²μ§Έμ μμλ₯Ό λ°ννλ€. import java.util.*; class Solution { public int findKthLargest(int[] nums, int k) { PriorityQueue pq = new PriorityQueue((a, b) -> b - a); for (int num : nums) { pq.offer(num); } int ans = 0; while (k-- > 0) { ans = pq.poll(); } return ans; } } κ²°κ³Ό π νκ³ λ무 κ°λ¨νκ² λ¬Έμ ..
[Java] 212. Word Search II
λ¬Έμ νμ λ¬Έμκ° μ±μμ Έμλ m*n ν¬κΈ°μ 보λκ° μ£Όμ΄μ§λ€. λ¬Έμμ΄μ΄ μ£Όμ΄μ§λλ°, ν΄λΉ λ¬Έμμ΄μ λ§λ€ μ μμΌλ©΄ λ°ννλ€. νμ΄ 1οΈβ£ λ°±νΈλνΉκ³Ό Set μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea λ°±νΈλνΉμΌλ‘ λ§λ€ μ μλ λ¬Έμμ΄μ λͺ¨λ ꡬν΄λ³Έλ€. ( μ΅λ κΈΈμ΄ 10μΌλ‘) ꡬν λ¬Έμμ΄μ Set μ λ£κ³ , μ£Όμ΄μ§λ λ¬Έμμ΄μ΄ Setμ λ€μ΄μλμ§ νμΈνλ€. import java.util.*; class Solution { int R; int C; boolean[][] checked; StringBuilder str = new StringBuilder(); int[] dr = {1, -1, 0, 0}; int[] dc = {0, 0, 1, -1}; char[][] board; Set set = new HashSet(); ..
[Java] 211. Design Add and Search Words Data Structure
λ¬Έμ νμ νΉμ λ¬Έμμ΄μ 보κ΄νκ³ search νμ λ, μ‘΄μ¬νλ©΄ trueλ₯Ό λ°ννλ μλ£κ΅¬μ‘°λ₯Ό λ§λ€μ΄μΌνλ€. . μ΄ ν¬ν¨λ κ²½μ°λ μ΄λ ν λ¬Έμκ° λ€μ΄κ°λ νμ©λλ€. νμ΄ 1οΈβ£ Trie μλ£κ΅¬μ‘°λ₯Ό μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea Trie μλ£κ΅¬μ‘°λ₯Ό μ΄μ©νλ©΄ μ λμ΄λ λΆλΆ λ¬Έμμ΄μ κ²μν μ μλ€. λ°λΌμ, Trie μλ£κ΅¬μ‘°λ₯Ό ꡬννμλ€. νΉν, μ΄ λ¬Έμ μμλ search κ³Όμ μμ . μ΄ ν¬ν¨λμ΄ μλ κ²½μ°λ ν΄λΉ λ Έλκ° κ°λ λͺ¨λ μμ λ Έλλ€μ νμνλλ‘ κ΅¬ννμ¬ ν΄κ²°ν μ μμ κ²μ΄λΌ νλ¨νμλ€. import java.util.*; class WordDictionary { static class Node { Map children; boolean isEndOfWord; public Node() { t..
[Java] 208. Implement Trie (Prefix Tree)
λ¬Έμ νμ Trie μλ£κ΅¬μ‘°λ₯Ό ꡬνν΄μΌνλ λ¬Έμ μ΄λ€. νΈλΌμ΄λ λ¬Έμμ΄μ μ μ₯νκ³ ν¨μ¨μ μΌλ‘ νμνκΈ° μν νΈλ¦¬ ννμ μλ£κ΅¬μ‘°μ΄λ€. ν΄μ ν μ΄λΈμ μ¬μ©νλ©΄ λλλ°, μ νΈλΌμ΄λ₯Ό μ¬μ©ν΄μΌν κΉ? π¨ ν΄μ ν μ΄λΈμ κ²½μ° μ λμ¬λ λΆλΆ λ¬Έμμ΄λ‘ κ²μνκΈ° νλ€λ€. λν, ν΄μ μ½λλ‘ μ μ₯νκΈ° λλ¬Έμ μ λ ¬λμ΄ μμ§ μλ€. νμ΄ 1οΈβ£ Node ν΄λμ€ μ μ class Trie { Node root; static class Node { Map children; boolean isEndOfWord; public Node() { this.children = new HashMap(); this.isEndOfWord = false; } } public Trie() { this.root = new Node(); } } Trie..
[Java] 637. Average of Levels in Binary Tree
λ¬Έμ νμ κ° level(depth)μ λ Έλλ€μ val κ° νκ· μ ꡬν΄μ λ°νν΄μΌνλ€. νμ΄ 1οΈβ£ κ·Έλν νμμ μ΄μ©ν νμ΄ (μ μ νμ) π‘ λ μ€λ₯Έ Idea μ μ νμμ depthλ₯Ό 1μ© μ¦κ°μν€λ©΄μ νμμ νλ€. κ° depthμ λλ¬νμ λ, ν΄λΉ depthμ ν©κ³Ό κ°μλ₯Ό μ μ₯νλ Listλ₯Ό ν΅ν΄ μ 보λ₯Ό κ°±μ νλ€. νμμ΄ λλκ³ λμ, νκ· κ°μ ꡬν΄μ λ°νν΄μ€λ€. import java.util.*; class Solution { List list = new ArrayList(); public List averageOfLevels(TreeNode root) { List ans = new ArrayList(); preOrder(root, 0); for (int i = 0; i < list.size()..
[Java] 199. Binary Tree Right Side View
λ¬Έμ νμ μ£Όμ΄μ§λ νΈλ¦¬λ₯Ό, μ€λ₯Έμͺ½μμ λ°λΌλ³΄μμ λ 보μ΄λ λ Έλλ€μ λ°νν΄μΌνλ€. λ¬Έμ ν΄μ μ, μ½κ° νΌλμ΄ μμ΄μ μ²μμλ νΈλ¦¬μ κ°μ₯ μ€λ₯Έμͺ½ λ Έλλ€μ μΆλ ₯ν΄μΌνλ μ€ μμλ€. λ°λΌμ μμ κ°μ΄ ꡬμ±λ νΈλ¦¬μ κ²½μ°, root λ Έλμ right node λ μκΈ° λλ¬Έμ κ²°κ³Όκ° [1] μ΄ λμμΌ λλ€κ³ μκ°νλλ° μꡬνλ λ΅μ [1,2] μλ€. ν΄μμ μ°Ύμ보λ, μ΄ νΈλ¦¬λ₯Ό μ€λ₯Έμͺ½μμ λ°λΌλ΄€μ λ 보μ΄λ λ Έλλ€μ μΆλ ₯νλΌλ λ»μ΄μλ€. νμ΄ 1οΈβ£ μ μ νμμ μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea μ μ νμμ κ²½μ° μμ κ°μ΄ λ£¨νΈ λ Έλμμ μμνμ¬ μΌμͺ½ νΉμ μ€λ₯Έμͺ½ κ²½λ‘μ λμ λλ¬νλ©΄ λΆλͺ¨μ λ°λνΈ λ Έλλ‘ λμ΄κ°λ λ°©μμΌλ‘ νμνλ€. μ λ¬Έμ μ κ²½μ°λ κ°μ₯ μ€λ₯Έμͺ½μ νμν΄μΌνλ―λ‘ κ²½λ‘λ₯Ό μ€λ₯Έμͺ½μΌλ‘ μμνλλ‘ ..
[Java] 230. Kth Smallest Element in a BST
λ¬Έμ νμ kλ²μ§Έλ‘ μμ κ°μ μΆλ ₯ν΄μΌνλ€. νμ΄ 1οΈβ£ μ€μ μνλ₯Ό μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea νΈλ¦¬ ꡬ쑰μμ μ€μ μνλ₯Ό νλ©΄ μ€λ¦μ°¨μ μμλ‘ λ Έλ λ°μ΄ν°λ₯Ό μΆλ ₯ν μ μλ€. μ΄λ¬ν μ리λ₯Ό μ μ©νμ¬ kλ²μ§Έ λ Έλμ μ κ·Όνμ λ, κ°μ μ μ₯νλλ‘ κ΅¬ννλ©΄ λκ² λ€κ³ νλ¨νμλ€. class Solution { int ans = 0; int idx = 1; public int kthSmallest(TreeNode root, int k) { inOrder(root, k); return ans; } private void inOrder(TreeNode node, int k) { if (node == null) { return; } inOrder(node.left, k); if (idx == k) { ans =..
[Java] 530. Minimum Absolute Difference in BST
λ¬Έμ νμ νΈλ¦¬ μμ μ‘΄μ¬νλ μμμ λ λ Έλμ μ°¨ μ€ μ΅μκ°μ λ°νν΄μΌνλ€. νμ΄ 1οΈβ£ μ€μ μνλ₯Ό μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea λ Έλ ꡬ쑰μμ μ€μ μνλ₯Ό νλ©΄μ λ Έλ κ°μ μΆλ ₯νλ©΄ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λ λ°μ΄ν°λ₯Ό μ»μ μ μλ€λ νΉμ§μ μ΄μ©νμλ€. 첫λ²μ§Έ λ Έλλ μ΄μ λ Έλκ° μ‘΄μ¬νμ§ μμΌλ―λ‘, κ³μ°μ μλ΅νλ€. κ·Έλ¦¬κ³ μ΄μ λ Έλ κ°μ κΈ°λ‘ν΄μ€λ€. λλ²μ§Έ λ Έλμ λλ¬νμ λ, μ΄μ λ Έλ κ°κ³Όμ μ°¨μ΄λ₯Ό ꡬνκ³ κ°±μ νλ€. κ°±μ ν, μ΄μ λ Έλ κ°μ λλ²μ§Έ κ°μ κΈ°λ‘ν΄μ€λ€. .... μ κ³Όμ μ λ°λ³΅νλ λ°©μμ΄λ€. class Solution { int ans = Integer.MAX_VALUE; Integer prev = null; public int getMinimumDifference(TreeNode r..
[Java] 153. Find Minimum in Rotated Sorted Array
λ¬Έμ νμ rotated λ λ°°μ΄ numsμ μ΅μκ°μ μ°Ύλ λ¬Έμ μ΄λ€. μκ° λ³΅μ‘λλ O(logN) μ λ§μ‘±ν΄μΌνλ€. νμ΄ 1οΈβ£ μ΄λΆ νμμ μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea μ΄μ μ νμλ Search in Rotated Sorted Array λ¬Έμ μ μΌλΆλΆκ³Ό κ°μ λ¬Έμ λΌμ μ½κ² ν΄κ²°ν μ μμλ€. μ΄λΆ νμμ μ§ννλλ°, mid μμΉμ κ°κ³Ό right μμΉμ κ°μ λΉκ΅ν΄μ mid κ°μ΄ μμ κ²½μ°, mid μμΉμ μμλ€μ μ€λ¦μ°¨μμΌλ‘ ꡬμ±λμ΄ μμμ 보μ₯ν μ μκΈ° λλ¬Έμ νμ μμμ μΌμͺ½ μμμΌλ‘ μ΄λνλ λ°©μμΌλ‘ ꡬννλ©΄ λλ€. class Solution { public int findMin(int[] nums) { int left = 0, right = nums.length - 1; while (le..
[Java] 33. Search in Rotated Sorted Array
λ¬Έμ νμ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λμ΄ μλ λ°°μ΄ numsκ° μμλ€. μΈλ±μ€ kλ²μ§Έ μμκ° μ μΌ μ²« μμκ° λλλ‘ rotated λμ΄μλ€. target μ΄ λ°°μ΄ nums μ ν¬ν¨λμ΄μλμ§ O(logN) μΌλ‘ νμνμ¬ μΈλ±μ€λ₯Ό λ°νν΄μΌνλ€. νμ΄ 1οΈβ£ μ΄λΆ νμμ μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea λ¨Όμ , μ£Όμ΄μ§ μκ° λ³΅μ‘λλ₯Ό λ§μ‘±νκΈ° μν΄μ μ΄λΆ νμμ μ¬μ©ν΄μΌν¨μ μ μ μμλ€. κ²°κ³Όμ μΌλ‘λ, targetμ΄ numsμ μ‘΄μ¬νλμ§λ₯Ό μ΄λΆ νμν΄μΌνλλ° νΉμ κ°μ νμνκΈ° μν΄μ μ λ ¬λμ΄μμ΄μΌ νλ€. λ°λΌμ, rotatedλ λ°°μ΄μ μ λ ¬λ λκ°μ λ°°μ΄λ‘ λλκΈ° μν΄ λ°°μ΄ λ΄μ μ΅μκ°μ κ²μνλ€. ex) [4, 5, 6, 7, 0, 1, 2] λ°°μ΄μ΄ μμ λ, [4, 5, 6, 7] κ³Ό [0, 1, 2] λ°°μ΄ 2κ°λ‘..
[Java] 162. Find Peak Element
λ¬Έμ νμ μ£Όλ³ μμλ€λ³΄λ€ ν° μμλ₯Ό peak elementλΌκ³ νλ€. κ·Έλ¬ν μμκ° μ¬λ¬κ°λΌλ©΄ μ무 μμμ μΈλ±μ€λ₯Ό λ°ννλ©΄ λλ€. μκ° λ³΅μ‘λκ° O(logN) μ΄ λλλ‘ κ΅¬νν΄μΌνλ€. νμ΄ 1οΈβ£ μ΄λΆ νμμ μ΄μ©ν νμ΄ π‘ λ μ€λ₯Έ Idea μκ°λ³΅μ‘λλ₯Ό ν΅ν΄ μ΄λΆ νμμ μ΄μ©ν΄μΌν¨μ μ μ μμλ€. λ³΄ν΅ μ΄λΆνμμ μ λ ¬λ λ°°μ΄μμλ§ μ¬μ©ν΄μμ, μ΄λΆ νμμ μ΄λ»κ² νμ©ν μ μμμ§ μ€λ«λμ μκ°ν΄λ³΄μλ€. mid ν¬μΈνΈ κ°μ΄ mid + 1 ν¬μΈνΈ κ°λ³΄λ€ μλ€λ©΄? mid ν¬μΈνΈ κ°μ peak element κ° λ νλ₯ μ΄ μ‘΄μ¬νμ§ μλλ€. λ°λΌμ νμ λ²μλ₯Ό mid+1 μ΄μμΌλ‘ μ‘μμ€μΌ ν κ²μ΄λ€. λ§μ½, mid ν¬μΈνΈ κ°μ΄ mid + 1 ν¬μΈνΈ κ° λ³΄λ€ ν¬λ€λ©΄ mid ν¬μΈνΈ κ°μ peak element ..
[Java] 148. Sort List
λ¬Έμ νμ μ°κ²° 리μ€νΈμ headκ° μ£Όμ΄μ§λ€. μ€λ¦μ°¨μμΌλ‘ μ λ ¬ν΄μ λ°νν΄μΌνλ€. νμ΄ 1οΈβ£ λ°°μ΄κ³Ό mergeSort π‘ λ μ€λ₯Έ Idea O(NlogN) λ°©μμΌλ‘ ν΄κ²°νκΈ° μν λ°©λ²μ λ μ¬λ €λ΄€λ€. ν΄λΉ μκ° λ³΅μ‘λλ‘ μ λ ¬ν μ μλ Merge Sort λ°©μμ μ¬μ©ν΄μΌ ν΄κ²°ν μ μμ κ²μ΄λΌ νλ¨νλ€. class Solution { public ListNode sortList(ListNode head) { int cnt = getCount(head); System.out.println(cnt); int[] arr = new int[cnt]; ListNode dummyHead = new ListNode(0, head); ListNode node = head; for (int i = 0; i < cnt; i..