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

๐Ÿƒ algorithm/leetcode93

LeetCode 78 - Subsets (Medium) ๋ฌธ์ œ LeetCode - 78๋ฒˆ ํ’€์ด ๊ณผ์ • ๋ฉฑ ์ง‘ํ•ฉ ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€๋งŒ ์ €๋Š” ๋น„ํŠธ ๋งˆ์Šคํฌ ๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋“  ๋ถ€๋ถ„ ์ง‘ํ•ฉ์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•œ๊ฐ€์ง€ ์œ ์˜ํ•  ์ ์€ ๋ฐ˜๋ณต๋ฌธ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  filter ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด subset ์— ํฌํ•จ๋œ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ์ฐพ์•„์„œ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์คฌ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[]} nums * @return {number[][]} */ var subsets = function (nums) { let numbers = 0; nums.forEach((n) => { numbers |= 1 subset & (1 2021. 3. 3.
LeetCode 739 - Daily Temperatures (Medium) ๋ฌธ์ œ LeetCode - 739๋ฒˆ ํ’€์ด ๊ณผ์ • ๊ฐ ๋‚ ์˜ ์˜จ๋„ ์ •๋ณด๊ฐ€ ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์งˆ ๋•Œ ๊ฐ ๋‚ ์˜ ์˜จ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ธฐ์˜จ์ด ์ƒ์Šนํ•˜๋Š” ์ตœ์ดˆ์˜ ๋‚ ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ฃจํŠธ ํฌ์Šค ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์งˆ ๊ฒฝ์šฐ O(N^2) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์‹œ๋„ํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์ž…๋ ฅ ๊ฐ’์˜ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹ ์— ์Šคํƒ ์„ ์‚ฌ์šฉํ•˜๋ฉด O(N) ์— ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ ์— ๊ฐ ๋‚ ์งœ์˜ ์˜จ๋„๋ฅผ ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ์ €์žฅํ•˜๋ฉฐ ๋งŒ์•ฝ ์ƒˆ๋กœ ๋“ค์–ด์˜ค๋Š” ๋‚ ์งœ์˜ ์˜จ๋„๊ฐ€ top ๋ณด๋‹ค ๋†’์„ ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๋‚ ์งœ๋ณด๋‹ค ์˜จ๋„๊ฐ€ ๋†’์€ ๋‚ ์ด ๋‚จ์„๋•Œ๊นŒ์ง€ pop ํ•ด์ฃผ๋ฉฐ ๋‚ ์งœ ๊ฐ„๊ฒฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ตœ์ข…์ ์œผ๋กœ ์Šคํƒ ์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‚จ์•„์žˆ๋Š” ์˜จ๋„๋Š” ๋ชจ๋‘ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ 0 ์œผ๋กœ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @.. 2021. 3. 3.
LeetCode 114 - Flatten Binary Tree to Linked List (Medium) ๋ฌธ์ œ LeetCode - 114๋ฒˆ ํ’€์ด ๊ณผ์ • ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— dfs ๋ฅผ ์‘์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€๊ฒฝํ•ด์ค€ ๋‹ค์Œ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ผฌ๋ฆฌ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ์™€ ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ null ๋กœ ์„ค์ •ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ๋ณ€ํ˜• ํ›„์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left.. 2021. 3. 3.
LeetCode 287 - Find the Duplicate Number (Medium) ๋ฌธ์ œ LeetCode - 287๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ์ค‘๋ณต๋œ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N^2) ๋ณด๋‹ค ๋‚ฎ์•„์•ผ ํ•˜๋ฉฐ O(1) ์˜ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋น„ํŠธ ๋งˆ์Šคํ‚น ์„ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๊ณ  ํ–ˆ์ง€๋งŒ Javascript ์—์„œ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ 32๋น„ํŠธ๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋„˜์–ด์„ค ๊ฒฝ์šฐ overflow ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ด๋ถ„ ํƒ์ƒ‰ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์—์„œ ์ค‘๋ณต๋œ ์›์†Œ๋Š” ์˜ค์ง ํ•˜๋‚˜์ด๋ฉฐ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์€ 1 ~ n ์˜ ์ˆซ์ž๋“ค ์ค‘ ํ•˜๋‚˜์˜ ์ˆซ์ž์™€ ๋งค์นญ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ถ„ ํƒ์ƒ‰ ์„ ํ™œ์šฉํ•ด์„œ ์ค‘๋ณต๋œ ์›์†Œ๋ฅผ ์ฐพ์•„์ฃผ๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠน์ • ๊ธฐ์ค€ ๊ฐ’ pivot ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์€ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ pivot ๋ณด๋‹ค ํด.. 2021. 3. 3.
LeetCode 347 - Top K Frequent Elements (Medium) ๋ฌธ์ œ LeetCode - 347๋ฒˆ ํ’€์ด ๊ณผ์ • ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” k ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O(NlogN) ์œผ๋กœ ์ง€์ •ํ•ด๋†จ๊ธฐ ๋•Œ๋ฌธ์— Hash Map ์„ ์‚ฌ์šฉํ•ด์„œ ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ Map ์— ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ์—๋Š” O(N) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋“ค๊ณ , ์ดํ›„ ๋นˆ๋„์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ Map ์„ ์ •๋ ฌํ•˜๋ฉด O(NlogN) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ •๋ ฌ ๊ฒฐ๊ณผ k ๊ฐœ์˜ ์ƒ์œ„ ์š”์†Œ๋“ค์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[]} nums * @param {number} k * @return {number[]} */ var topKFrequent = function (nums, k) { const nu.. 2021. 3. 3.
LeetCode 322 - Coin Change (Medium) ๋ฌธ์ œ LeetCode - 322๋ฒˆ ํ’€์ด ๊ณผ์ • ์˜ค๋žœ๋งŒ์— ํ’€์–ด๋ณด๋Š” ๋™์  ๊ณ„ํš๋ฒ• ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. dp[x] = x ์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋™์ „์˜ ๊ฐœ์ˆ˜ ๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp[x] = for all coins, min{ dp[x - coins[i]] } ์ด๋•Œ i ๋Š” i ๋ฒˆ์งธ ๋™์ „์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number[]} coins * @param {number} amount * @return {number} */ var coinChange = function (coins, amount) { const dp = new Array(amount + 1).fill(Infinity); // ์ดˆ๊ธฐ๊ฐ’ dp[0] = 0; for (let money = 1; money 2021. 3. 3.