๐ 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. ์ด์ 1 2 3 4 5 6 7 ยทยทยท 16 ๋ค์