[์•Œ๊ณ ๋ฆฌ์ฆ˜] ํˆฌํฌ์ธํ„ฐ(Two Pointer) ์•Œ๊ณ ๋ฆฌ์ฆ˜
ยท
Algorithm/KBro Study
ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฆฌ์ŠคํŠธ๋‚˜ ๋ฐฐ์—ด์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•  ๋•Œ, ๋‘ ๊ฐœ์˜ ์ ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1. ์›๋ฆฌ 1. ์‹œ์ž‘์ ๊ณผ ๋์ ์ด ์ฒซ๋ฒˆ์งธ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€๋ฅดํ‚ค๋„๋ก ํ•œ๋‹ค. 2. ๋ชฉํ‘œ๊ฐ’ ๋ณด๋‹ค ์‹œ์ž‘์  ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋์ ์˜ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์ž‘์œผ๋ฉด ๋์ (end)๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. 3. ๋ชฉํ‘œ๊ฐ’ ๋ณด๋‹ค ์‹œ์ž‘์  ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ๋์ ์˜ ์ธ๋ฑ์Šค๊นŒ์ง€์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์‹œ์ž‘์ (start)๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. 4. ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•  ๋•Œ๊ฐ€์ง€ 2~3๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. 2. ์˜ˆ์ œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž. ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์ธ ํŠน์ •ํ•œ ํ•ฉ์„ ๊ฐ€์ง€๋Š” ๋ถ€๋ถ„ ์—ฐ์† ์ˆ˜์—ด ์ฐพ๊ธฐ๋กœ ์•Œ์•„๋ณด์ž. ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆ˜์—ด์ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์—ฐ์†๋˜๋Š” ์ˆ˜์˜ ํ•ฉ์ด 5 ์ผ๋•Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž. ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ..
[์•Œ๊ณ ๋ฆฌ์ฆ˜] LCS(์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด) & LIS(๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด)
ยท
Algorithm/KBro Study
1. LCS๋ž€? Longest Common Subsequence์˜ ์•ฝ์ž์ด๋ฉฐ, ๋‘ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๋ถ„ ์ˆœ์„œ๋“ค ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 'ABCBDAB'์™€ 'BDCABA'์˜ LCS๋ฅผ ๊ตฌํ•ด๋ณด๋ฉด ABCBDAB BDCABA => 'BCBA'๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  LCS๋Š” ์ตœ์ ํ™”๋ฅผ ํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋™์ ๊ณ„ํš๋ฒ•(DP)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 1-1. ์ ‘๊ทผ ๋ฐฉ๋ฒ• & ์˜ˆ์‹œ ๋‘ ๋ฌธ์ž์—ด 'GCABCD' ๊ทธ๋ฆฌ๊ณ  'ABDCED'๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, LCS๋ฅผ ๊ตฌํ•˜๋Š” ์ง„ํ–‰๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, {GCA}, {GCAB}, {GCABC}, {GCABCD}์™€ {A}๋ฅผ ๋น„๊ตํ•˜๋ฉด ๊ณตํ†ต ์ˆ˜์—ด์ด 1์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์œ„ ๊ทธ๋ฆผ์€ {ABDCED} ..
[์•Œ๊ณ ๋ฆฌ์ฆ˜] Dynamic Programming(๋™์  ๊ณ„ํš๋ฒ•)
ยท
Algorithm/KBro Study
1. DP๋ž€? DP(Dynamic Programming)์€ ํ•˜๋‚˜์˜ ํฐ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ๋‹ค์‹œ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ด๋ฏธ ํ–ˆ๋˜ ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฐ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ณ ์•ˆ๋˜์—ˆ๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ์žฌ๊ท€ ๋ฐฉ์‹๋„ DP์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ์žฌ๊ท€ ๋ฐฉ์‹์€ ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋“ค์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต๋˜์–ด ๋น„ํšจ์œจ์ ์ธ ๊ณ„์‚ฐ์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Dynamic Programming ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” Top-Down๊ณผ Bottop-Up ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ, ์•„๋ž˜์—์„œ ์•Œ์•„๋ณด๊ฒ ๋‹ค. 2. Dynamic Programming ๊ตฌํ˜„ 2-1 Top-Down ๋ฐฉ์‹ Top-Down ๋ฐฉ์‹์ด๋ž€ ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ๋ง ๊ทธ๋Œ€๋กœ..
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Bellman-Ford)
ยท
Algorithm/KBro Study
1. ๋ฒจ๋งŒํฌ๋“œ(Bellman-Ford) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + ์Œ์ˆ˜ ์‚ฌ์ดํด ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ ๋‹ค์ต์ŠคํŠธ๋ผ์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฐ€์ค‘์น˜์— ์Œ์ˆ˜๊ฐ€ ์žˆ์–ด๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‹œ๊ฐ„๋ณต์žก๋„: O(NE) (N:๋…ธ๋“œ์˜ ์ˆ˜, E:์—ฃ์ง€์˜ ์ˆ˜) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ๋…ธ๋“œ 1์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋กœ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด 1 -> 2 = 1 1 -> 2 ->3 = 2 1-> 2 ->3 ->4 = 4 ๊ฐ€ ๋˜๊ณ  ๋…ธ๋“œ 2๋Š” ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 4 ->2 ๊ฒฝ๋กœ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์Œ ๊ฒฐ๊ณผ์ ์œผ๋กœ 1 -> 2์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋Š” 1์ด ๋จ ํ•˜์ง€๋งŒ ์‹ค์ œ 1 -> 2์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋Š” -โˆž ์ž„ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํƒ„์ƒ 2. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘ ์›๋ฆฌ ์‹œ์ž‘ ์ •์ ์„ ์„ ํƒํ•œ๋‹ค. ๋ชจ๋“  ๊ฐ„์„ ๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ..
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆฌ๋”” - ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ(Minimum Spanning Tree)
ยท
Algorithm/KBro Study
๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ, ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์•Œ์•„๋ณด์ž. ๊ทธ๋ฆฌ๋””(ํƒ์š•) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ž€? => ๋งค ์„ ํƒ์—์„œ ์ง€๊ธˆ ์ด ์ˆœ๊ฐ„ ๋‹น์žฅ ์ตœ์ ์ธ ๋‹ต์„ ์„ ํƒํ•˜์—ฌ ์ ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. = ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น ๋ฅด์ง€๋งŒ, ํ•ญ์ƒ ์ตœ์ ์ธ ๋‹ต์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค. Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜ Disjoint-set(์„œ๋กœ์†Œ ์ง‘ํ•ฉ)์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ex) {1,2} {3,4} โ†’ ์„œ๋กœ์†Œ, {1,2} {2,3} โ†’ ์„œ๋กœ์†Œ ์•„๋‹˜ (1). Union 2๊ฐœ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ•ฉ์น˜๊ธฐ ex) {1} + {2} โ†’ {1,2} (2). Find ํŠน์ • ์›์†Œ๊ฐ€ ์†ํ•œ ์ง‘ํ•ฉ์ด ๋ญ”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ฐ์‚ฐ ex) Find({ {1,2,3}, {4,5}, {10} }, 2) โ†’ {1,2..