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

๐Ÿƒ algorithm/leetcode93

LeetCode 118 - Pascal's Triangle (Easy) ๋ฌธ์ œ LeetCode - 118๋ฒˆ ํ’€์ด ๊ณผ์ • ํŒŒ์Šค์นผ ์‚ผ๊ฐํ˜•์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. 1๋ฒˆ์งธ ํ–‰๊ณผ 2๋ฒˆ์งธ ํ–‰์€ ๊ฐ๊ฐ [1] ๊ณผ [1, 1] ๋กœ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ๋Š” ๋งˆ์ง€๋ง‰ ํ–‰์˜ ์ธ์ ‘ํ•œ ์š”์†Œ๋“ค์„ ๋”ํ•ด์„œ ์ƒˆ๋กœ์šด ํ–‰์„ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number} numRows * @return {number[][]} */ var generate = function (numRows) { const answer = []; let walker = 1; while (walker 2021. 3. 3.
LeetCode 19 - Remove Nth Node From End of List (Medium) ๋ฌธ์ œ LeetCode - 19๋ฒˆ ํ’€์ด ๊ณผ์ • ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์—์„œ ๋’ค์—์„œ n ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋’ค์—์„œ n ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ์šฐ์„  ๋ฆฌ์ŠคํŠธ์˜ ์ „์ฒด ํฌ๊ธฐ๋ฅผ ์•Œ์•„๋‚ธ ๋‹ค์Œ, ์ด๋™ํ•ด์•ผ ํ•˜๋Š” offset ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์„œ next ์†์„ฑ์„ ์žฌ์ง€์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @param {number} n * @r.. 2021. 3. 3.
LeetCode 79 - Word Search (Medium) ๋ฌธ์ œ LeetCode - 79๋ฒˆ ํ’€์ด ๊ณผ์ • ์ด์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ธ์ ‘ํ•œ ๋ฌธ์ž๋“ค์„ ์ด์šฉํ•ด์„œ ํŠน์ • ๋‹จ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฐฑํŠธ๋ž˜ํ‚น ์„ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ž๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ์œ„์น˜๋ฅผ ์ฐพ๋„๋ก ํƒ์ƒ‰์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์›ํ•˜๋Š” ๋‹จ์–ด๋ฅผ ์ฐพ์œผ๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ž๋“ค์€ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ true ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {character[][]} board * @param {string} word * @return {boolean} */ var exist = function (board, word) { const dx = [0, 0, 1, -1]; const dy = [1, -1, 0, 0]; function dfs(x, y, depth, visit) { if (board[x][.. 2021. 3. 3.
LeetCode 771 - Jewels and Stones (Easy) ๋ฌธ์ œ LeetCode - 771๋ฒˆ ํ’€์ด ๊ณผ์ • ํŠน์ • ๋ฌธ์ž์—ด์— ํฌํ•จ๋œ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž ํƒ์ƒ‰์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ๋ฌธ์ž์—ด J ๋ฅผ ํ•ด์‹ฑํ•ด์„œ ์ €์žฅํ•œ ๋‹ค์€ S ๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ J ์— ์กด์žฌํ•˜๋Š”์ง€ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด O(N) ์— ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {string} J * @param {string} S * @return {number} */ var numJewelsInStones = function (J, S) { const hashTable = {}; [...J].forEach((c) => (hashTable[c] = 1)); const answer = [...S].filter((c) => hashTable[c]); return answer.le.. 2021. 3. 3.
LeetCode 5 - Longest Palindromic Substring (Medium) ๋ฌธ์ œ LeetCode - 5๋ฒˆ ํ’€์ด ๊ณผ์ • ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ dp(i, j) = i์—์„œ j๊นŒ์ง€์˜ ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๊ธธ์ด ๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp(i, j) = if dp[i] == dp[j] & dp(i+1, j-1) is palindrome, dp(i+1, j-1) + 2 else 0 ๊ธฐ์ € ์‚ฌ๋ก€๋กœ ๊ฐ ๋ฌธ์ž๋Š” ๊ธธ์ด๊ฐ€ 1์ธ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋ผ๋Š” ๊ฒƒ์— ์œ ์˜ํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {string} s * @return {string} */ var longestPalindrome = function (s) { let answer = ""; const dp = new Array(s.length) .fill(null) .map((x).. 2021. 3. 3.
LeetCode 206 - Reverse Linked List (Easy) ๋ฌธ์ œ LeetCode - 206๋ฒˆ ํ’€์ด ๊ณผ์ • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋’ค์ง‘๋Š” ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์žฌ๊ท€ ํ˜ธ์ถœ์€ ๋‹ค์Œ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ ๋…ธ๋“œ๊นŒ์ง€์˜ ๋’ค์ง‘ํžŒ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋ฉฐ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ํ† ๋Œ€๋กœ ํ˜„์žฌ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @return {ListNode} */ var rev.. 2021. 3. 3.