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

๐Ÿƒ algorithm/leetcode93

LeetCode 120 - Triangle (Medium) ๋ฌธ์ œ LeetCode - 120๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฒซ๋ฒˆ์งธ ํ–‰์—์„œ ๋งˆ์ง€๋ง‰ ํ–‰๊นŒ์ง€ ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Œ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. dp(row, idx) = row ํ–‰์˜ idx ์—ด์—์„œ ๋งˆ์ง€๋ง‰ ํ–‰์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๊ฑฐ๋ฆฌ ๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp[row][idx] = min(dp[row + 1][idx], dp[row + 1][idx + 1]) + triangle[row][idx] ์ฝ”๋“œ /** * @param {number[][]} triangle * @return {number} */ var minimumTotal = function (triangle) { const INF = 9999999; const rowLimit = triangle.length; const mem.. 2021. 4. 13.
LeetCode 38 - Count and Say (Medium) ๋ฌธ์ œ LeetCode - 38๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ๊ทœ์น™๋Œ€๋กœ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์—ฐ์†๋œ ์ˆซ์ž๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์ฃผ๊ธฐ ์œ„ํ•ด ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number} n * @return {string} */ var countAndSay = function (n) { let str = "1"; for (let i = 1; i < n; i += 1) { let cacheKey = ""; let count = 0; let temp = ""; for (let ch of str) { if (cacheKey !== ch) { if (cacheKey) { temp += `${count}${cacheKey}`; } cacheKey = ch; count = 1; } else { c.. 2021. 4. 13.
LeetCode 199 - Binary Tree Right Side View (Medium) ๋ฌธ์ œ LeetCode - 199๋ฒˆ ํ’€์ด ๊ณผ์ • ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์˜ค๋ฅธ์ชฝ์—์„œ ๋ดค์„ ๋•Œ ๋ณด์ด๋Š” ๋…ธ๋“œ๋“ค์„ ๋†’์ด์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ๋ฐฉ๋ฌธ ์‹œ ์ด์ „๊นŒ์ง€ ๋ฐฉ๋ฌธํ•œ ํŠธ๋ฆฌ ๋†’์ด ์ถ”์ ์„ ์œ„ํ•ด isVisitedLevel ์ด๋ผ๋Š” ๋ฐฐ์—ด์„ ์œ ์ง€ํ•˜๋ฉฐ ๋ฐฉ๋ฌธ์„ ์˜ค๋ฅธ์ชฝ ์ž์‹ -> ์™ผ์ชฝ ์ž์‹ ์ˆœ์œผ๋กœ ํ•˜๋˜ ์ด์ „์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋ ˆ๋ฒจ์ผ ๊ฒฝ์šฐ์—๋งŒ ๋ฐฐ์—ด์— push ํ•ด์ค๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * 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===undefin.. 2021. 4. 5.
LeetCode 344 - Reverse String (Easy) ๋ฌธ์ œ LeetCode - 344๋ฒˆ ํ’€์ด ๊ณผ์ • in place ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฐ์—ด์„ ๋’ค์ง‘๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์™ผ์ชฝ ๋ ๊ณผ ์˜ค๋ฅธ์ชฝ ๋ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋’ค์ง‘๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */ var reverseString = function (s) { let lo = 0; let hi = s.length - 1; while (lo < hi) { [s[hi], s[lo]] = [s[lo], s[hi]]; lo += 1; hi -= 1; } return s; }; 2021. 4. 5.
LeetCode 1578 - Minimum Deletion Cost to Avoid Repeating Letters (Medium) ๋ฌธ์ œ LeetCode - 1578๋ฒˆ ํ’€์ด ๊ณผ์ • ์—ฐ์†๋œ ๋ฌธ์ž์—ด์—์„œ ์ธ์ ‘ํ•œ ๊ฐ ์Œ์˜ ๋ฌธ์ž๊ฐ€ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ณด์ • ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๊ฐ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ™์€ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ์ธ์ ‘ํ•œ ๊ทธ๋ฃน๋“ค์„ ์ฐพ๊ณ , ์ด ๊ทธ๋ฃน ๋‚ด์—์„œ ๊ฐ€์žฅ ๋น„์šฉ์ด ํฐ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฌธ์ž๋“ค์„ ์„ ํƒํ•ด์„œ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ € ๊ฐ™์€ ๊ฒฝ์šฐ ๊ฐ๊ฐ์˜ ๊ทธ๋ฃน์„ ๋จผ์ € ๋งŒ๋“ค๊ณ  ๋น„์šฉ์„ ๊ณ„์‚ฐํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ์ด๋Ÿด ํ•„์š”์—†์ด ๊ทธ๋ƒฅ ๊ฐ ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ธ์ ‘ํ•œ ๋ฌธ์ž๋“ค์ด ์„œ๋กœ ๊ฐ™์„ ๋•Œ ๊ทธ๋•Œ๊ทธ๋•Œ ๊ทธ๋ฃน์„ ๋งŒ๋“ค์–ด์„œ ๋น„์šฉ์„ ์ฒดํฌํ•ด์ค˜๋„ ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {string} s * @param {number[]} cost * @return {number} */ var minCost = function (s, cost) { const .. 2021. 3. 8.
LeetCode 904 - Fruit Into Baskets (Medium) ๋ฌธ์ œ LeetCode - 904๋ฒˆ ํ’€์ด ๊ณผ์ • ์ตœ๋Œ€ 2์ข…๋ฅ˜์˜ ๊ณผ์ผ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ๊ณผ์ผ์„ ๋‹ด์€ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š” ํˆฌ ํฌ์ธํ„ฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. head ์™€ tail ์„ ์ด์šฉํ•ด์„œ ๊ณผ์ผ์„ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•˜๋Š”๋ฐ, 2์ข…๋ฅ˜์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ณผ์ผ์ด๋ฉด tail ์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ด๋ฅผ ๋งŒ์กฑํ• ๋•Œ๊นŒ์ง€ head ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[]} tree * @return {number} */ var totalFruit = function (tree) { let head = 0; let tail = 0; let answer = 1; const basket = new Map(); basket.set(tree[head], 1); while.. 2021. 3. 8.