λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸƒ algorithm/leetcode93

LeetCode 787 - Cheapest Flights Within K Stops (Medium) 문제 LeetCode - 787번 풀이 κ³Όμ • μ΅œλŒ€ K 개의 κ²½μœ μ§€λ₯Ό ν¬ν•¨ν•œλ‹€λŠ” 쑰건 μ•„λž˜μ—μ„œ ν•œ μ •μ μ—μ„œ λͺ©ν‘œ μ •μ κΉŒμ§€μ˜ μ΅œλ‹¨ 경둜λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. λ”°λΌμ„œ 단일 정점 - λͺ¨λ“  쌍 μ΅œλ‹¨ 경둜 μ•Œκ³ λ¦¬μ¦˜μΈ λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜ 을 λ³€ν˜•ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 사싀 κ°„μ„  선택을 μœ„ν•΄ μš°μ„ μˆœμœ„ 큐 도 μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ„œ μ• λ§€ν•œ 뢀뢄이 μžˆμ§€λ§Œ BFS + Dijkstra 의 μœ ν˜•μ΄λΌκ³  μƒκ°ν•˜λ©΄ 될 것 κ°™μŠ΅λ‹ˆλ‹€. 이 문제의 핡심은 k 개의 κ²½μœ μ§€λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•  것인가 μž…λ‹ˆλ‹€. 기쑴의 λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜ 은 이전에 λ°œκ²¬λ˜μ–΄ 큐에 μ €μž₯λ˜μ–΄ μžˆλŠ” 경둜 쀑 더 짧은 κ²½λ‘œκ°€ λ°œκ²¬λ˜μ–΄ dist κ°€ κ°±μ‹  λ˜μ—ˆμ„ 경우 νμ—μ„œ 이전에 발견된 κ²½λ‘œκ°€ pop λ˜μ–΄ μ²˜λ¦¬ν•  μ°¨λ‘€κ°€ 되면 κ·Έλƒ₯ λ¬΄μ‹œλ₯Ό ν•΄μ£ΌλŠ” λ°©μ‹μœΌλ‘œ 처리λ₯Ό ν•΄μ€¬μŠ΅λ‹ˆλ‹€. .. 2021. 3. 2.
LeetCode 417 - Pacific Atlantic Water Flow (Medium) 문제 LeetCode - 417번 풀이 κ³Όμ • μž…λ ₯으둜 μ£Όμ–΄μ§„ κ²©μžνŒμ—μ„œ κ°€μž₯μžλ¦¬μ— 도달할 수 μžˆλŠ” μ’Œν‘œλ₯Ό μ°ΎλŠ” BFS λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. 문제 쑰건에 따라 x μ£„ν‘œ ν˜Ήμ€ y μ’Œν‘œ κ°€ 0보닀 μž‘μ•„μ§ˆ κ²½μš°λŠ” pacific 에 ν•΄λ‹Ήν•˜κ³  κ·Έ λ°˜λŒ€μ˜ κ²½μš°μ—λŠ” atlantic 에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. λ”°λΌμ„œ matrix 의 각 μ§€μ λ§ˆλ‹€ BFS λ₯Ό μˆ˜ν–‰ν•˜λ©° pacific κ³Ό atlantic 에 λͺ¨λ‘ 도달 κ°€λŠ₯ν•œ κ²½μš°μ—λ§Œ ν•΄λ‹Ή μ£„ν‘œκ°’μ„ κΈ°λ‘ν•˜μ—¬ 닡을 ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ μΈμ ‘ν•œ 지역에 λŒ€ν•΄μ„œ 값이 κ°™κ±°λ‚˜ μž‘μ„ κ²½μš°μ—λ§Œ 이동할 수 μžˆλ‹€λŠ” 것에 μœ μ˜ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. μ½”λ“œ /** * @param {number[][]} matrix * @return {number[][]} */ var pacificAtlantic = function (m.. 2021. 3. 2.
LeetCode 17 - Letter Combinations of a Phone Number (Medium) 문제 LeetCode - 17번 풀이 κ³Όμ • νœ΄λŒ€ν° μžνŒμ„ μ΄μš©ν•΄μ„œ λ§Œλ“€ 수 μžˆλŠ” λ¬Έμžμ—΄μ„ λͺ¨λ‘ μ°ΎλŠ” λ°±νŠΈλž˜ν‚Ή λ¬Έμ œμž…λ‹ˆλ‹€. 각 μˆ«μžλ³„λ‘œ ν• λ‹Ήλœ λ¬Έμžλ“€μ„ ν‘œν˜„ν•΄μ£ΌλŠ” λ‹€μ–‘ν•œ 방법듀 (Map, Object λ“±) 이 μžˆμ§€λ§Œ μ €λŠ” 배열에 인덱슀둜 μ ‘κ·Όν•˜λŠ” 방법을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 숫자둜 이루어진 μ£Όμ–΄μ§„ μž…λ ₯ λ¬Έμžμ—΄μ„ ν•œ μžλ¦¬μ”© μˆœνšŒν•˜λ©° λ§Œλ“€ 수 μžˆλŠ” λͺ¨λ“  λ¬Έμžμ—΄μ„ μž¬κ·€ν˜ΈμΆœλ‘œ μƒμ„±ν•˜λ©΄ λ©λ‹ˆλ‹€. μ½”λ“œ /** * @param {string} digits * @return {string[]} */ const buttons = [ 0, 0, "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz", ]; var letterCombinations = function (digits) {.. 2021. 3. 2.
LeetCode 230 - Kth Smallest Element in a BST (Medium) 문제 LeetCode - 230번 풀이 κ³Όμ • 이진 검색 트리 μ—μ„œ k번째 μ›μ†Œλ₯Ό μ°ΎλŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 이진 검색 트리 λŠ” 루트 λ…Έλ“œκ°€ ν•΄λ‹Ή λ…Έλ“œμ˜ μ™Όμͺ½ μžμ‹ λ…Έλ“œλ³΄λ‹€ 크고 였λ₯Έμͺ½ λ…Έλ“œλ³΄λ‹€ μž‘μ€ 값을 κ°€μ§‘λ‹ˆλ‹€. λ”°λΌμ„œ 이λ₯Ό μ€‘μœ„ 순회 ν•  경우 ν‚€ 값이 μ •λ ¬λœ μˆœμ„œλŒ€λ‘œ λ°©λ¬Έν•œλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν™œμš©ν•˜μ—¬ μ€‘μœ„ 순회λ₯Ό ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€κ³  k 번째 λ…Έλ“œμ— λ°©λ¬Έν–ˆμ„ λ•Œλ₯Ό κΈ°λ‘ν•˜μ—¬ 닡을 κ΅¬ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ½”λ“œ /** * @param {number[]} nums * @return {number} */ var rob = function (nums) { const memo = new Array(nums.length).fill(-1); function dp(i) { if (i >= nums.length) re.. 2021. 3. 2.
LeetCode 198 - House Robber (Easy) 문제 LeetCode - 198번 풀이 κ³Όμ • λ„λ‘‘μ§ˆμ„ 톡해 얻을 수 μžˆλŠ” μ΅œλŒ€ μˆ˜μ΅μ„ κ΅¬ν•˜λŠ” 동적 κ³„νšλ²• λ¬Έμ œμž…λ‹ˆλ‹€. λ§Œμ•½ dp(house) = house μ—μ„œλΆ€ν„° λ§ˆμ§€λ§‰ μ§‘κΉŒμ§€ λ„λ‘‘μ§ˆμ„ 톡해 얻을 수 μžˆλŠ” μ΅œλŒ€ 수읡 이라고 ν•œλ‹€λ©΄, λ‹€μŒκ³Ό 같은 점화식을 μ„ΈμšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. dp(house) = max(dp(house+1), dp(house + 2) + cost[house]) μ—¬κΈ°μ„œ 두 κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄μ§€λŠ” μ΄μœ λŠ” ν˜„μž¬ house μœ„μΉ˜μ—μ„œ λ„λ‘‘μ§ˆμ„ ν•˜λŠ” 것과 μ•ˆν•˜λŠ” 것 μ΄λ ‡κ²Œ 두 κ°€μ§€ κ²½μš°κ°€ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ½”λ“œ /** * @param {number[]} nums * @return {number} */ var rob = function (nums) { const memo = new Array(nums.le.. 2021. 3. 2.
LeetCode 22 - Generate Parentheses (Medium) 문제 LeetCode - 22번 풀이 κ³Όμ • μ£Όμ–΄μ§„ κ΄„ν˜ΈμŒμ˜ κ°œμˆ˜μ— λ§žλŠ” μ˜¬λ°”λ₯Έ κ΄„ν˜Έ 배치λ₯Ό μƒμ„±ν•˜λŠ” λ°±νŠΈλž˜ν‚Ή λ¬Έμ œμž…λ‹ˆλ‹€. μ΄λ•Œ ν•΄λ‹Ή κ΄„ν˜Έλ°°μΉ˜κ°€ μ˜¬λ°”λ₯΄κ²Œ μœ„ν•΄μ„œλŠ” μ–‘ 끝의 κ΄„ν˜Έκ°€ 각각 ( 와 ) μ—¬μ•Ό ν•œλ‹€λŠ” 점을 μœ μ˜ν•˜λ„λ‘ ν•©λ‹ˆλ‹€. λ˜ν•œ κ΄„ν˜ΈμŒμ΄ μ˜¬λ°”λ₯΄κΈ° μœ„ν•΄μ„œλŠ” ( κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ¦λ° ) κ°€ ( 보닀 λ¨Όμ € ν• λ‹Ήλ˜λ©΄ μ•ˆλ©λ‹ˆλ‹€. λ”°λΌμ„œ 각각의 μž¬κ·€ ν˜ΈμΆœλ§ˆλ‹€ ( 의 μ—¬μœ λΆ„μ΄ μžˆλ‹€λ©΄ ) λ₯Ό μ‹œλ„ν•΄λ³΄λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ ( λ˜ν•œ μ΅œλŒ€ n 번 만큼만 λ“±μž₯ν•  수 μžˆμœΌλ―€λ‘œ left 와 leftCount λ₯Ό 각각 κ΅¬λΆ„ν•˜μ—¬ μ „μžλŠ” ( 의 μ—¬μœ λΆ„μœΌλ‘œ ) κ°€ λ“±μž₯ν• λ•Œλ§ˆλ‹€ κ°μ†Œμ‹œμΌœμ€¬κ³ , ν›„μžλŠ” ν˜„μž¬κΉŒμ§€ μ„ νƒλœ ( 의 개수λ₯Ό λ‚˜νƒ€λ‚΄λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ½”λ“œ /** * @param {number} n * @return {.. 2021. 3. 2.