๐Ÿง coding interview 2

Day06. ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์‹œ๊ฐ„ ๋ณต์žก๋„๋น… ์˜ค ํ‘œ๊ธฐ๋ฒ•big-O (๋น… ์˜ค ํ‘œ๊ธฐ๋ฒ•) : O() => ์ตœ์•…์˜ ๊ฒฝ์šฐ, worst case์ ๊ทผ์  ์ƒํ•œ์„ ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ๋ฌดํ•œ๋Œ€๋กœ ๊ฐˆ ๋•Œ์ ๊ทผ์  ์ƒํ•œ(์•„๋ฌด๋ฆฌ ๋‚˜๋น ๋„์‹œ๊ฐ„์ด ์ด๋ณด๋‹ค ๋œ ๊ฑธ๋ฆผ. ์ฆ‰, ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค)์ฃผ๋กœ, ๋น… ์˜ค ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•จ๊ณ„์‚ฐ ๋ฐฉ๋ฒ•๊ฐ€์žฅ ํฐ์ฐจ์ˆ˜ ๋งŒ ๊ณ ๋ ค : ์˜ˆ) n2 + n + 1 => O(n2)๊ณ„์ˆ˜๋Š” 1 ๋กœ ํ•จ : ์˜ˆ) 3n => O(1n) => O(n)์ž‘์€ ์ฐจ์ด๋Š” ๋ฌด์‹œ : ์˜ˆ) O(n-1) => O(n)๊ทœ๋ชจ๊ฐ€ ํฐ ๊ฒƒ ๋งŒ ๊ณ ๋ ค : ์˜ˆ) O(2n + n2) => O(2n)ํฌ๊ธฐ ์ˆœ์„œ$$ O(1) โฉ ์˜ค๋ž˜ ๊ฑธ๋ฆผ ๊ณต๊ฐ„ ๋ณต์žก๋„์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋งŽ์ง€ ์•Š์Œ.์žฌ๊ท€ ๊ตฌํ˜„ํ•  ๋•Œ ์ •๋„? ์ž…๋ ฅ๋ฐฉ๋ฒ•: ์ฒซ์งธ ์ค„์— ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜ N (= 10,000,000), ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ..

[PS] Dynamic programming : ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ํ•œ ๋ฒˆ ํ•ด๊ฒฐ๋œ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ๋ฉ”๋ชจ๋ฆฌ์— ๊ธฐ๋กํ•˜์—ฌ ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•œ ๋‹ต์€ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ธฐ๋ฒ•. ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ ํ™”์‹์„ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์˜ฎ๊ฒจ์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ ํ™”์‹์ด๋ž€ ์ธ์ ‘ํ•œ ํ•ญ๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„์‹์„ ์˜๋ฏธํ•œ๋‹ค. ์กฐ๊ฑด ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(Optional substructure) ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž‘์€ ๋ฌธ์ œ์˜ ๋‹ต์„ ๋ชจ์•„์„œ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ(Overlapping Subproblem) ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•จ ์˜ˆ์‹œ (๋ฌธ์ œ ๋งํฌ ์ถ”๊ฐ€ ์˜ˆ์ •) ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘๊ฐ€์ง€ 1. Top-down : ๋ฉ”๋ชจ์ด์ œ์ด์…˜ (Memoization) ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ˜ธ..