๊ทธ๋ฆฌ๋””(Greedy) - ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ(MST)
ยท
๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ด๋ก 
kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„(c์–ธ์–ด) #include #include typedef struct Edge { char v1, v2; int weight; struct Edge* next; }Edge; typedef struct IncidentEdge { char aName; Edge* e; struct IncidentEdge* next; }IncidentEdge; typedef struct Vertex { char vName; IncidentEdge* iHead; struct Vertex* next; }Vertex; typedef struct { Vertex* vHead; Edge* eHead; int eCount, vCount; }Graph; void init(Graph* G) { G->vHead = ..
๋™์  ๊ณ„ํš ์•Œ๊ณ ๋ฆฌ์ฆ˜(DP/Dynamic Programming)
ยท
๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ด๋ก 
๋™์  ๊ณ„ํš ์•Œ๊ณ ๋ฆฌ์ฆ˜(DP) ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ‘ผ ๋‹ค์Œ, ๊ทธ ๊ฒฐ๊ณผ๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ๋ฒ• ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ •๋ณด๋ฅผ ์ €์žฅ->์‹œ๊ณต๊ฐ„์  ํšจ์œจ ์ฆ๊ฐ€ memoization ํ™œ์šฉ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(๊ธฐ๋ณธ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๊ฐ€ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ํฌํ•จ) DP ์ ์šฉ ์—ฌ๋ถ€ ํŒ๋‹จ ๋ฐฉ๋ฒ• 1.๋ฌธ์ œ๋ฅผ ๊ฐ™์€ ํ˜•ํƒœ์˜ ํ•˜์œ„ ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๊ฐ€ 2.ํ•˜์œ„ ๋ฌธ์ œ์˜ ๊ณ„์‚ฐ์ด ๋ฐ˜๋ณต๋˜๋Š”๊ฐ€ (์ตœ์ ํ™”, ์ตœ๋Œ€ํ™”, ์ตœ์†Œํ™”, ์–ด๋–ก ์ž‘์—…์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ธ๊ฐ€ *์• ๋งคํ•œ ๊ฒฝ์šฐ์— ์ฐธ๊ณ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ DP ๋ฌธ์ œ ์œ ํ˜•) DP ์ ์šฉ ๊ณผ์ • 1. ์ ํ™”์‹ / ์žฌ๊ท€ ๊ณผ์ • ์ •์˜ - ๋ฌธ์ œ๋ฅผ Top-Down(ํ•˜ํ–ฅ์‹/์žฌ๊ท€) ์œผ๋กœ ์ •์˜ํ•œ๋‹ค - ๋ฌธ์ œ ํ’€์ด์— ํ•„์š”ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ œ์˜ ํ•˜์œ„ ๋ถ€๋ถ„ ๊ฐ’์„ ์ดˆ๊ธฐํ™” - ์ข…๋ฃŒ ์กฐ๊ฑด ์ถ”๊ฐ€ 2. memoization ์ ์šฉ 3...
๊ทธ๋ฆฌ๋””(Greedy)/ํƒ์š• ๊ธฐ๋ฒ•
ยท
๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ด๋ก 
๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ€์žฅ ์ง๊ด€์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์ตœ์ ํ™” ๋ฌธ์ œ(๊ฐ€๋Šฅํ•œ ํ•ด๋“ค ์ค‘ ๊ฐ€์žฅ ์ข‹์€(์ตœ๋Œ€/์ตœ์†Œ) ํ•ด๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ)๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. ๋ชจ๋“  ์„ ํƒ์ง€๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ , ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•๋งŒ์„ ์„ ํƒ (๊ทผ์‹œ์•ˆ์  ํƒœ๋„) -> ๊ทผ์‹œ์•ˆ์ ์ธ ์„ ํƒ์œผ๋กœ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ์ฐพ๊ณ , ์ด๋“ค์„ ๋ชจ์•„์„œ(์ถ•์ ํ•˜์—ฌ) ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ์–ป๋Š”๋‹ค. ๊ทผ์‹œ์•ˆ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฒฝ์šฐ ์ตœ์ ์˜ ์ •๋‹ต์„ ์ฐพ์•„์ฃผ์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ •๋‹น์„ฑ ์ฆ๋ช…์ด ํ•„์ˆ˜์ !(ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๊ฐ€ ์ œํ•œ์ ) -ํƒ์š•์  ์„ ํƒ ์†์„ฑ : ํƒ์š•์ ์œผ๋กœ ์„ ํƒํ•˜๋”๋ผ๋„ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค -์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ : ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด์—์„œ ์ „์ฒด ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๋””์˜ ์‚ฌ์šฉ 1. ๋™์ „ ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ ๊ฑฐ์Šค๋ฆ„๋ˆ ์•ก์ˆ˜์— ๋Œ€ํ•œ ์ตœ์†Œ ๋™์ „ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ -๊ฑฐ์Šค๋ฆ„๋ˆ..
๋ถ„ํ• ์ •๋ณต(Divide and Conquer) - ์ตœ๊ทผ์ ‘ ์ ์˜ ์Œ ์ฐพ๊ธฐ
ยท
๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/์ด๋ก 
์ตœ๊ทผ์ ‘ ์ ์˜ ์Œ(closest pair) ๋ฌธ์ œ๋Š” 2์ฐจ์› ํ‰๋ฉด์ƒ์˜ n๊ฐœ์˜ ์ ์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์งˆ ๋•Œ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ•œ ์Œ์˜ ์ (๊ฑฐ๋ฆฌ)์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ตœ๊ทผ์ ‘ ์ ์˜ ์Œ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋ชจ๋“  ์ ์— ๋Œ€ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ ์˜ ์Œ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ• (BruteForce) - O(n^2) n๊ฐœ์˜ ์ ์„ 1/2๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๋ถ€๋ถ„ ๋ฌธ์ œ์—์„œ ์ตœ๊ทผ์ ‘ ์ ์˜ ์Œ์„ ์ฐพ๊ณ  ๋ถ€๋ถ„ํ•ด ์ค‘ ์งง์€ ์Œ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ• (๋ถ„ํ• ์ •๋ณต) ์ด ์žˆ๋‹ค. ๋ถ€๋ถ„ํ•ด๋ฅผ ์ทจํ•ฉ(์ •๋ณต)ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ค‘๊ฐ„ ์˜์—ญ ์‚ฌ์ด์˜ ์ ์—์„œ ๋” ๊ทผ์ ‘ํ•œ ์ ์˜ ์Œ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ค‘๊ฐ„ ์˜์—ญ์˜ ์ ๋“ค์€ [์™ผ์ชฝ ๊ทธ๋ฃน์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ ์˜ x ์ขŒํ‘œ์—์„œ ๋ถ€๋ถ„ํ•ด๋ฅผ ๋บ€ ๊ฐ’๊ณผ ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฃน์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ์ ์˜ x์ขŒํ‘œ์—์„œ ๋ถ€๋ถ„ํ•ด๋ฅผ ๋”ํ•œ ๊ฐ’ ์‚ฌ์ด์˜ x ์ขŒํ‘œ ๊ฐ’์„ ๊ฐ€์ง„..