๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿƒ algorithm/leetcode93

LeetCode 112 - Path Sum (Easy) ๋ฌธ์ œ LeetCode - 112๋ฒˆ ํ’€์ด ๊ณผ์ • ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์žŽ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฒฝ๋กœ ์ค‘ ํ•ฉ์ด S ์ธ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. DFS ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฃจํŠธ ๋…ธ๋“œ ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ์— ์œ ์˜ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */ /** * @param {TreeNode} .. 2021. 3. 4.
LeetCode 63 - Unique Paths II (Medium) ๋ฌธ์ œ LeetCode - 63๋ฒˆ ํ’€์ด ๊ณผ์ • ์‹œ์ž‘ ์ง€์ ์—์„œ ๋ชฉํ‘œ ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. dp(x, y) ๋ฅผ (x, y) ์—์„œ ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ ๋ชจ์„œ๋ฆฌ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp(x, y) = dp(x + 1, y) + dp(x, y + 1) ์ด๋•Œ dp(x, y) ์—๋Š” ์žฅ์• ๋ฌผ์ด ์—†์–ด์•ผ ํ•˜๋ฉฐ ๊ฒฉ์ž๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[][]} obstacleGrid * @return {number} */ var uniquePathsWithObstacles = function (obstacleGrid) { const m = obstacleGrid.length; const n = obstacleGrid[0]... 2021. 3. 4.
LeetCode 1011 - Capacity To Ship Packages Within D Days (Medium) ๋ฌธ์ œ LeetCode - 1011๋ฒˆ ํ’€์ด ๊ณผ์ • ํ™”๋ฌผ๋“ค์˜ ๋ฌด๊ฒŒ weights ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ D ์ผ์— ๋ชจ๋“  ํ™”๋ฌผ์„ ๋ฐฐ์†กํ•˜๊ธฐ ์œ„ํ•œ ํ™”๋ฌผ์„ ์˜ ์ตœ์†Œ ๋ฌด๊ฒŒ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋ฌธ์ œ ๋ถ„๋ฅ˜๋Š” ์ด๋ถ„ ํƒ์ƒ‰ ์œผ๋กœ ๋˜์–ด ์žˆ์ง€๋งŒ ์ž…๋ ฅ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ ค ํ–ˆ์„ ๋•Œ ์™„์ „ ํƒ์ƒ‰ ์œผ๋กœ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ด๋ถ„ ํƒ์ƒ‰ ์„ ํ™œ์šฉํ•ด๋ณด๋ฉด ํ™”๋ฌผ์„ ์˜ ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ ๋ฌด๊ฒŒ๋ฅผ ์ •ํ•˜๊ณ  ๋ชจ๋“  ํ™”๋ฌผ์„ ์šด๋ฐ˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ์ผ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ ๋น„๊ตํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํšŒ๋ฌผ์„ ์˜ ์ตœ์†Œ ๋ฌด๊ฒŒ๋Š” ๋ชจ๋“  ํ™”๋ฌผ ์ค‘ ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๊ฒƒ์ด๋ฉฐ ์ตœ๋Œ€ ๋ฌด๊ฒŒ๋Š” ๋ชจ๋“  ํ™”๋ฌผ์„ ํ•˜๋ฃจ๋งŒ์— ๋ฐฐ์†กํ•˜๊ธฐ ์œ„ํ•œ ๋ฌด๊ฒŒ(์ฆ‰, ๋ชจ๋“  ํ™”๋ฌผ ๋ฌด๊ฒŒ์˜ ํ•ฉ) ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[]} weights * @param {number} D * @return {number} *.. 2021. 3. 4.
LeetCode 881 - Boats to Save People (Medium) ๋ฌธ์ œ LeetCode - 881๋ฒˆ ํ’€์ด ๊ณผ์ • ์ตœ๋Œ€ 2๋ช…์ด ํƒˆ ์ˆ˜ ์žˆ๋Š” ๋ณดํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„ ์˜ฎ๊ธฐ๋Š” ์ตœ์†Œ ์™•๋ณต ์ด๋™ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์šฐ์„  ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•ด์„œ ๋ณดํŠธ์— ์ˆœ์„œ๋Œ€๋กœ ํƒœ์šฐ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ƒ๊ฐํ•ด๋ณผ ์ ์€ people[head] < limit ์ผ ๋•Œ ๋‚จ์€ ์‚ฌ๋žŒ์€ limit - people[head] ๋ณด๋‹ค ์ ์€ ๋ชธ๋ฌด๊ฒŒ ์ค‘ ๊ฐ€์žฅ ํฐ ๋ฌด๊ฒŒ A ๋ฅผ ๊ฐ€์ง€๋Š” ์‚ฌ๋žŒ์„ ์„ ํƒํ•  ๊ฒƒ์ธ์ง€ ํ˜น์€ ๋‚จ์€ ์‚ฌ๋žŒ๋“ค ์ค‘ ๊ฐ€์žฅ ๋ฌด๊ฒŒ๊ฐ€ ์ ๊ฒŒ ๋‚˜๊ฐ€๋Š” ์‚ฌ๋žŒ B ์„ ์„ ํƒํ•  ๊ฒƒ์ธ์ง€ ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ A ๋ฅผ ์„ ํƒํ•˜๋“  B ๋ฅผ ์„ ํƒํ•˜๋“  ์„ ํƒ๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ์œ„ํ•ด ๋ณดํŠธ๊ฐ€ ํ•˜๋‚˜ ํ•„์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ๋ฌด๊ฒŒ๊ฐ€ ๋งŽ์ด ๋‚˜๊ฐ€๋Š” ์‚ฌ๋žŒ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ head ์™€ ๊ฐ€์žฅ ๋ฌด๊ฒŒ๊ฐ€ ์ ์€ ์‚ฌ๋žŒ์„.. 2021. 3. 4.
LeetCode 234 - Palindrome Linked List (Easy) ๋ฌธ์ œ LeetCode - 234๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ ์ธ์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N) ์ด๋ฉด์„œ ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1) ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋จผ์ € ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•œ ๋‹ค์Œ, ์ค‘์•™ ์œ„์น˜๊นŒ์ง€ ์ด๋™ํ•ด์„œ ํŒฐ๋ฆฐ๋“œ๋กฌ ์œ ๋ฌด๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” a[i] ~ a[j] ๊นŒ์ง€์˜ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” a[i+1] ~ a[j-1] ๊นŒ์ง€๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๊ณ  a[i] == a[j] ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ๊ฐ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ ๊ณผ์ •์—์„œ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ ์œ ๋ฌด ์™€ tail ๋…ธ๋“œ ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ ์žฌ๊ท€ ํ˜ธ์ถœ ๊ณผ์ •์—์„œ ๊ฐ๊ฐ์˜ ์„œ๋ธŒ ๋ฆฌ์ŠคํŠธ์˜ ์–‘ ๋ ๋…ธ๋“œ๋ฅผ ๋น„๊ตํ•ด์ค๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * Definition for singly-linked list. * .. 2021. 3. 4.
LeetCode 309 - Best Time to Buy and Sell Stock with Cooldown (Medium) ๋ฌธ์ œ LeetCode - 309๋ฒˆ ํ’€์ด ๊ณผ์ • ํŠน์ • ๋‚ ์— ์ฃผ์‹์„ ๋งค๋„ ํ˜น์€ ๋งค์ˆ˜ํ•˜์—ฌ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์œค์„ ๊ณ„์‚ฐํ•˜๋Š” ๋™์  ๊ณ„ํš๋ฒ• ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ ์กฐ๊ฑด์—์„œ ์ฃผ์‹์„ ๊ตฌ๋งค ์ „์—๋Š” ํŒ๋งค๋ฅผ ๋จผ์ € ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ dp(i, buy) = i ๋ฒˆ์งธ ๋‚  ์ฃผ์‹์˜ ํŒ๋งค ์ƒํƒœ๊ฐ€ buy ์ผ ๋•Œ i ์ดํ›„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์œค ์ด๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp(i, buy) = max(dp(i+1, true) - stock[i], dp(i+1, false)), if buy == false else(buy == true), dp(i, buy) = max(dp(i+2, false) + stock[i], dp(i+1, true)) ์ฆ‰, `i` ๋ฒˆ์งธ ๋‚  ์ฃผ์‹์„ .. 2021. 3. 4.