๐ 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. ์ด์ 1 ยทยทยท 8 9 10 11 12 13 14 ยทยทยท 16 ๋ค์