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

๐Ÿƒ algorithm/leetcode93

LeetCode 62 - Unique Paths (Medium) ๋ฌธ์ œ LeetCode - 62๋ฒˆ ํ’€์ด ๊ณผ์ • ์ „ํ˜•์ ์ธ ๋™์  ๊ณ„ํš๋ฒ• ์„ ํ™œ์šฉํ•œ ๊ฒฝ๋กœ ์ฐพ๊ธฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ ์ง€์ ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์ด ์˜ค๋ฅธ์ชฝ๊ณผ ์•„๋ž˜์ชฝ์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— dp(x, y) = (x, y) ์ง€์ ์—์„œ finish์— ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ๋กœ์˜ ๊ฐœ์ˆ˜ ๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp(x, y) = dp(x+1, y) + dp(x, y+1) ์ด๋•Œ ๊ฒฉ์ž๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ finish ์ง€์ ์— ๋„์ฐฉํ•˜๋Š” ๊ธฐ์ € ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค๋ฉด ์‰ฝ๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {number} m * @param {number} n * @return {number} */ var uniquePaths = function (m, n) { const memo = new Array.. 2021. 3. 2.
LeetCode 121 - Best Time to Buy and Sell Stock (Easy) ๋ฌธ์ œ LeetCode - 121๋ฒˆ ํ’€์ด ๊ณผ์ • ์‹œ์„ธ๊ฐ€ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ์ฃผ์‹์„ ์‚ฌ๊ณ  ํŒ”์•˜์„ ๋•Œ ๊ฐ€์žฅ ํฐ ์ด์œค์„ ๋‚จ๊ธฐ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ง๊ด€์ ์œผ๋กœ ์ฃผ์‹์ด ๊ฐ€์žฅ ๋‚ฎ์„ ๋•Œ ์‚ฌ์„œ ๊ฐ€์žฅ ๋†’์„ ๋•Œ ํŒŒ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์ด์œค์„ ๋‚จ๊ธด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์ตœ์†Œ ๋น„์šฉ ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๊ฒƒ๊ณผ ๋™์‹œ์— ๊ฐ ์ƒํ’ˆ๋งˆ๋‹ค ํ˜„์žฌ ์ธ๋ฑ์Šค๊นŒ์ง€ ํƒ์ƒ‰ํ•œ ์ตœ์†Œ ๋น„์šฉ ๊ณผ์˜ ์ฐจ์ด๊ฐ’์„ ํ†ตํ•ด ์ตœ๋Œ€ ํŒ๋งค ์ˆ˜์ต ์„ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋‹น์„ฑ ์ฆ๋ช… ์ตœ์†Œ ๋น„์šฉ์„ ์„ ํƒํ•˜๋Š” ์šฐ๋ฆฌ์˜ ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์€ ์ž๋ช…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํžˆ ์ฆ๋ช…ํ•˜๊ณ  O(N) ์— ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ •๋‹น์„ฑ์„ ๋”ฐ์ ธ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๋งค ์‹œ์„ธ๋งˆ๋‹ค ์ตœ์†Œ๋น„์šฉ์„ ๊ฐฑ์‹ ํ•œ ๊ฒฐ๊ณผ ์ตœ์ ํ•ด๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์‹ค์ œ ์ตœ์ ํ•ด(๊ฐ€์ •).. 2021. 3. 2.
LeetCode 101 - Symmetric Tree (Easy) ๋ฌธ์ œ LeetCode - 101๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์ตœ์ƒ์œ„ ๋ฃจํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์„œ๋กœ ๋Œ€์นญ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ๋Œ€์นญ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ์˜ˆ์‹œ๋กœ ๊ทธ๋ ค์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ๋Œ€์นญ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ํŒ๋‹จํ•ด์ค„ ์ˆ˜ ์žˆ์„๊นŒ์š”? ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€๋งŒ ์ €๋Š” ํŠธ๋ฆฌ์˜ ์ˆœํšŒ๋ฅผ ์‘์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋Œ€์นญ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ํŠธ๋ฆฌ๋Š” ์ตœ์ƒ์œ„ ๋ฃจํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋ฐฐ์น˜๊ฐ€ ์„œ๋กœ ๋ฐ˜๋Œ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ ์ „์œ„ ์ˆœํšŒ ๋ฅผ ์ˆ˜ํ–‰ํ•˜์˜€๊ณ , ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ๋Š” ๋Œ€์นญ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— ์™ผ์ชฝ ์ž์‹๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ฒŒํ•˜์—ฌ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ•ด๋‹น ํŠธ๋ฆฌ๊ฐ€ ๋Œ€์นญ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๋‘ ์ˆœํšŒ ๊ฒฐ.. 2021. 3. 2.
LeetCode 876 - Middle of the Linked List (Easy) ๋ฌธ์ œ LeetCode - 876๋ฒˆ ํ’€์ด ๊ณผ์ • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋‹จ์ˆœ ๊ตฌํ˜„ ๋ฌธ์ œ๋กœ ๋ฆฌ์ŠคํŠธ์˜ head ๋ถ€ํ„ฐ ํฌ์ธํ„ฐ๋ฅผ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•œ ๋’ค ์ค‘๊ฐ„ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * 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 middleNode = function (head).. 2021. 3. 2.
LeetCode 221 - Maximal Square (Medium) ๋ฌธ์ œ LeetCode - 221๋ฒˆ ํ’€์ด ๊ณผ์ • ์ฃผ์–ด์ง„ martix ์•ˆ์—์„œ ๊ฐ€์žฅ ํฐ ์ •์‚ฌ๊ฐํ˜•์„ ์ฐพ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ •์‚ฌ๊ฐํ˜•์€ ๋˜๋‹ค๋ฅธ ์ •์‚ฌ๊ฐํ˜•์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ํ†ตํ•ด ๋™์  ๊ณ„ํš๋ฒ• ์œผ๋กœ ํ’€์ด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ dp(x, y) = (x, y)๋ฅผ ์™ผ์ชฝ ๋ชจ์„œ๋ฆฌ๋กœ ํ•˜๋Š” ์ตœ๋Œ€ ์ •์‚ฌ๊ฐํ˜•์˜ ํ•œ ๋ณ€์˜ ๊ธธ์ด ๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ์„ธ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dp(x,y) = 0 if board[x][y] == 0 else min(dp(x+1, y), dp(x+1, y+1), dp(x, y+1)) + 1 ์ด๋•Œ board ์˜ ๊ฐ ์ง€์ ์„ ์ˆœํšŒํ•˜๋ฉฐ 1์ด ๋ฐœ๊ฒฌ๋ ๋•Œ๋งˆ๋‹ค dp ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ์ตœ๋Œ€๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋ฉด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ /** * @param {character[][]} matrix .. 2021. 3. 2.
LeetCode 543 - Diameter of Binary Tree (Easy) ๋ฌธ์ œ LeetCode - 543๋ฒˆ ํ’€์ด ๊ณผ์ • ์ด์ง„ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด์ง„ํŠธ๋ฆฌ ํ˜น์€ ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž„์˜์˜ ๋‘ ์ •์  ์‚ฌ์ด์˜ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๊ฒฝ๋กœ๋ฅผ ์•Œ์•„๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  root ๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1 / \ 2 3 /\ 4 5 1 / 2 / \ 4 5 ์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ •ํ–ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ(์ง€๋ฆ„)๋Š” ์žŽ๋…ธ๋“œ - ์žŽ๋…ธ๋“œ ํ˜น์€ ๋ฃจํŠธ๋…ธ๋“œ - ์žŽ๋…ธ๋“œ ์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ๋…ธ๋“œ - ์žŽ๋…ธ๋“œ ์˜ ๊ฒฝ์šฐ ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ๊ตฌํ•˜๋ฉด ๋˜์ง€๋งŒ ์žŽ๋…ธ๋“œ - ์žŽ๋…ธ๋“œ ์˜ ๊ฒฝ์šฐ ๋‚ด๋ถ€ ๋…ธ๋“œ ์‚ฌ์ด์—์„œ ๊ฐ€์žฅ ๊ธด ๊ฒฝ๋กœ๊ฐ€ ํ˜•์„ฑ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์•„์ด๋””์–ด๊ฐ€ ํ•„์š”.. 2021. 3. 2.