๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์•Œ๊ณ ๋ฆฌ์ฆ˜ (6)

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ด๋ถ„ ํƒ์ƒ‰(Binary Search)

1. ์ด๋ถ„ ํƒ์ƒ‰ ; Binary Search 1.1 ๊ฐœ๋… ๋ฒ”์œ„๋ฅผ ์ ์  ์ขํ˜€๊ฐ€๋ฉฐ ํƒ์ƒ‰์„ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ์ด์ง„ ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ํ•˜๋‚˜์”ฉ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹Œ left์™€ right ์–‘์ชฝ์—์„œ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ํƒ์ƒ‰์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ผ๋ฐ˜ ํƒ์ƒ‰์ด O(n), ์ด๋ถ„ ํƒ์ƒ‰์ด O(log n)์ด๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ฏธ๋ฆฌ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ, ์ •ํ•ด๋†“์€ ์ธ๋ฑ์Šค ์œ„์น˜์ธ left์™€ right๋กœ mid ๊ฐ’์„ ์ •ํ•ด์คŒ(mid = (left + right) / 2) mid๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๊ณผ ๋ชฉํ‘œ ๊ฐ’(result)์„ ๋น„๊ตํ•œ๋‹ค. mid > result, right = mid - 1 mid๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๋ณด๋‹ค ๋ชฉํ‘œ ๊ฐ’์ด ๋” ์ž‘์„ ๊ฒฝ์šฐ, ๋ชฉํ‘œ ๊ฐ’์ด ์ ˆ๋ฐ˜ ์•„๋ž˜์ชฝ์— ํฌํ•จ๋œ ๋ฒ”์œ„ ์•ˆ์— ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ri..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ ๋ฌธ์ œ - 2. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)

'์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ with C++' ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ๋ณด๋Ÿฌ๊ฐ€๊ธฐ 2.2.3 ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ ; Breadth-First Search ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์€ ์‹œ์ž‘ ์ •์ ๊ณผ ๊ฐ€๊นŒ์šด ์ •์ ๋ถ€ํ„ฐ ๋ฐ˜๋ณต์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ์–‘์˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. 0๋ฒˆ์งธ ์ •์ ์„ ์‹œ์ž‘์œผ๋กœ ์ž‘์€ ๊ฐ’๋ถ€ํ„ฐ ์ฐพ์•„๊ฐ„๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค. 1๋‹จ๊ณ„ : 0๋ฒˆ ์ •์  ๋ฐฉ๋ฌธ 2๋‹จ๊ณ„ : 0๋ฒˆ ์ •์ ๊ณผ ์ธ์ ‘ํ•œ ์ •์  ์ค‘ ๊ฐ€์žฅ ๊ฐ’์ด ์ž‘์€ 1๋ฒˆ ์ •์  ๋ฐฉ๋ฌธ 3๋‹จ๊ณ„ : 0๋ฒˆ ์ •์ ๊ณผ ์ธ์ ‘ํ•œ ์ •์  ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ณ , ๊ฐ€์žฅ ๊ฐ’์ด ์ž‘์€ 2๋ฒˆ ์ •์  ๋ฐฉ๋ฌธ 4๋‹จ๊ณ„ : 0๋ฒˆ ์ •์ ๊ณผ ์ธ์ ‘ํ•œ ์ •์  ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ 3๋ฒˆ ์ •์  ๋ฐฉ๋ฌธ 5..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ ๋ฌธ์ œ - 1. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)

'์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ with C++' ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋”๋ณด๊ธฐ 1. ๊ทธ๋ž˜ํ”„ ; Graph 1.1 ๊ฐœ๋… ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ ๋ฌธ์ œ๋ฅผ ๋“ค์–ด๊ฐ€๊ธฐ ์ „ ์งง๊ฒŒ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์ž๋ฉด, ๊ทธ๋ž˜ํ”„๋Š” ์ •์ (vertex)์˜ ์ง‘ํ•ฉ๊ณผ ์ •์ ๋“ค์„ ์„œ๋กœ ์ž‡๋Š” ๊ฐ„์„ (edge)์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆ˜ํ•™์ ์œผ๋กœ๋Š” G = (v๋Š” ์ •์ , e๋Š” ๊ฐ„์„ ์˜ ์ง‘ํ•ฉ) ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„์„  ๋ฐฉํ–ฅ์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(directed graph)์™€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(undirected graph)๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ณ , ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„(weighted graph)์™€ ๋น„๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„(unweighted graph)๋กœ ๋‚˜๋ˆˆ๋‹ค. 2. ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ ๋ฌธ์ œ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ - 2. ํ€ต ์ •๋ ฌ(Quick Sort)

2. ํ€ต ์ •๋ ฌ ; Quick Sort 2.1 ๊ฐœ๋… ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ์ •๋ ฌ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ๋ณ‘ํ•ฉ ์ •๋ ฌ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ „์ฒด ์ง‘ํ•ฉ์„ ์ž‘์€ ํฌ๊ธฐ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ๋‹ค์‹œ ํ•ฉ์น˜๋Š” ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณ‘ํ•ฉ ์ •๋ ฌ์˜ ํ•ต์‹ฌ ์—ฐ์‚ฐ์€ ๋ณ‘ํ•ฉ์ธ ๋ฐ ๋น„ํ•ด ํ€ต ์ •๋ ฌ์˜ ํ•ต์‹ฌ ์—ฐ์‚ฐ์€ ๋ถ„ํ• ์ด๋‹ค. ํ€ต ์ •๋ ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋œ๋‹ค. 1. ๋ถ„ํ• (Divide) : ์ •๋ ฌํ•  ์ง‘ํ•ฉ์„ ๊ธฐ์ค€๊ฐ’์„ ์ค‘์‹ฌ์œผ๋กœ ๋‘ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋ถ„ํ•  2. ์ •๋ณต(Conquer) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๋‚ด์—์„œ ๊ธฐ์ค€๊ฐ’์˜ ์ •๋ ฌ ์œ„์น˜ ์„ ์ • ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ค€๊ฐ’์„ ํ”ผ๋ด‡(Pivot) ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์›์†Œ / ๋งˆ์ง€๋ง‰ ์›์†Œ / ๊ฐ€์šด๋ฐ ์›์†Œ ๋“ฑ ์ž„์˜์˜ ์ˆœ์„œ์˜ ๊ฐ’์„ ์ •ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ •ํ•œ ๊ธฐ์ค€๊ฐ’์„ ์ค‘์‹ฌ์œผ๋กœ ์™ผ์ชฝ(L)๊ณผ ์˜ค๋ฅธ์ชฝ(R) ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋‚˜๋ˆ„์–ด ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ - 1. ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)

1. ๋ณ‘ํ•ฉ ์ •๋ ฌ ; Merge Sort 1.1 ๊ฐœ๋… ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ์ •๋ ฌ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ์—ฌ๋Ÿฌ ์ •๋ ฌ๋œ ์ง‘ํ•ฉ๋“ค์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ •๋ ฌ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค. ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€์˜ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ์ง„ํ–‰๋œ๋‹ค. 1. ๋ถ„ํ• (Divide) : ํฐ ์ง‘ํ•ฉ์„ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋ถ„ํ•  2. ์ •๋ณต(Conquer) : ๋ถ€๋ถ„์ง‘ํ•ฉ ๋‚ด์˜ ์›์†Œ ์ •๋ ฌ 3. ๊ฒฐํ•ฉ(Combine) : ์ •๋ ฌ๋œ ๋ถ€๋ถ„์ง‘ํ•ฉ๋“ค์„ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฒฐํ•ฉ ์›๋ฆฌ๋งŒ ์ƒ๊ฐํ•˜๋ฉด ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ๊ทธ๋ฆผ๊ณผ ํ•จ๊ป˜ ๋ณด๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์ง‘ํ•ฉ A๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. A = { 3, 8, 7, 2, 5, 1, 4, 6 } ์ง‘ํ•ฉ A๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•ด๋ณด์ž. ๋ณ‘ํ•ฉ ์ •๋ ฌํ•˜๋Š” ๊ณผ์ •์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค...

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋™์ ๊ณ„ํš๋ฒ•(Dynamic Programming)

'์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ with C++' ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. 1. ๋™์  ๊ณ„ํš๋ฒ• ; dynamic programming 1.1 ๊ฐœ๋… ๋ถ„ํ•  ์ •๋ณต ํŒจ๋Ÿฌ๋‹ค์ž„ ๊ฐœ๋…์„ ํ™•์žฅํ•œ ๊ฒƒ์œผ๋กœ, ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฌธ์ œ๋ฅผ ์ผ์ปซ๋Š” ๋ง์ด๋‹ค. ์–ธ๋œป ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ๋น„์Šทํ•˜๋‹ค ์ƒ๊ฐ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ถ„ํ•  ์ •๋ณต๊ณผ ๊ตฌ๋ถ„๋˜๋Š” ๋™์  ๊ณ„ํš๋ฒ•๋งŒ์˜ ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ(overlapping subproblem) 2. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(optimal substructure) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ๋งŒ์กฑํ•ด์•ผ ๋™์  ๊ณ„ํš๋ฒ•์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ „์ฒด ๋ฌธ์ œ๊ฐ€ ๋…๋ฆฝ์ ์ธ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋‰˜๋Š” ๋ถ„ํ•  ์ •๋ณต ๋ฌธ์ œ์™€ ๋‹ฌ๋ฆฌ ๋™์  ๊ณ„ํš๋ฒ•์—์„œ๋Š” ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋“ฑ์žฅํ•œ๋‹ค. ๋˜ํ•œ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ..