[์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„(Graph) + ๊ตฌํ˜„ํ•˜๊ธฐ(Java์˜ ์ธ์ ‘ํ–‰๋ ฌ๊ณผ ์ธ์ ‘๋ฆฌ์ŠคํŠธ)
ยท
Algorithm/KBro Study
๊ทธ๋ž˜ํ”„(Graph)๋ž€? ๊ทธ๋ž˜ํ”„๋ž€ ์š”์†Œ๋“ค์ด ์„œ๋กœ ๋ณต์žกํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ทธ๋ž˜ํ”„๋Š” ์ •์ (vertex)๊ณผ ์ •์ ๊ณผ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (edge)๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. -> ์ •์ (vertex)๋Š” ๋…ธ๋“œ(node)๋ผ๊ณ ๋„ ํ•จ ์•„๋ž˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜๋“ค์˜ ์˜ˆ์‹œ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ปดํ“จํ„ฐ์—์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋ฐฐ์—ด(Array)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ - ์ธ์ ‘ ํ–‰๋ ฌ(Adjacency Materix) ์ •์  a์™€ ์ •์  b๋ฅผ ์ž‡๋Š” ๊ฐ„์„ ์ด ์žˆ์„ ๊ฒฝ์šฐ, ํ–‰๋ ฌ(a,b)์— 1์„ ํ‘œ๊ธฐํ•ด์ค€๋‹ค. ๋งŒ์•ฝ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋ผ๋ฉด 1 ๋Œ€์‹  ๊ฐ€์ค‘์น˜๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด..
[์•Œ๊ณ ๋ฆฌ์ฆ˜] Brute Force(๋ธŒ๋ฃจํŠธ ํฌ์Šค)
ยท
Algorithm/KBro Study
Brute Force(๋ธŒ๋ฃจํŠธ ํฌ์Šค) ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋Š” Brute : ๋‚œํญํ•œ / Force : ํž˜ => ๋‚œํญํ•œ ํž˜์œผ๋กœ ํ•ด์„์ด ๋œ๋‹ค. ์ด๋ฅผ ์„ค๋ช…ํ•˜๋ฉด, ๋ฌด์‹ํ•˜๊ฒŒ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰(์™„์ „ํƒ์ƒ‰)ํ•˜๋ฉด์„œ ์กฐ๊ฑด์— ์ถฉ์กฑ๋˜๋Š” ๊ฒฐ๊ณผ๋งŒ์„ ๊ฐ€์ ธ์˜จ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋ชจ๋“  ์˜์—ญ์„ ์ „์ฒด ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ „์ฒด ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์„ ํ˜• ๊ตฌ์กฐ๋ฅผ ์ „์ฒด์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์ˆœ์ฐจ ํƒ์ƒ‰, ๋น„์„ ํ˜• ๊ตฌ์กฐ๋ฅผ ์ „์ฒด์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS), ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS), ๋ฐฑํŠธ๋ž˜ํ‚น(Backtracking) ๊ฐ€ ๊ธฐ๋ณธ์ ์ธ ๋„๊ตฌ์ด๋‹ค. ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์ „์ฒด ํƒ์ƒ‰์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋ฉด ๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์—ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋Š” ์™„๋ฒฝํžˆ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ์—, ์ •ํ™•๋„๋Š” ์šฐ์ˆ˜ํ•˜์ง€๋งŒ, ์ž์›์„ ๋„ˆ๋ฌด ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์—..
[์ž๋ฃŒ๊ตฌ์กฐ] B-tree, B+tree ์ด๋ก  ์ •๋ฆฌ
ยท
Algorithm/KBro Study
B-tree "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์œผ๋กœ, ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•ด ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ์ˆซ์ž๊ฐ€ 2๋ณด๋‹ค ํฐ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค." ์ •๋ฆฌํ•˜์ž๋ฉด, B-tree๋Š” Binary search tree์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ํ•œ ๋…ธ๋“œ ๋‹น ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ ๊ฐ€๋Šฅํ•˜๋‹ค ๋ผ๊ณ  ํ• ์ˆ˜์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋จผ์ € ํŠธ๋ฆฌ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ํŠธ๋ฆฌ ๊ตฌ์กฐ๋Š” ๊ผญ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ•œ์ •ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์‹œ์Šคํ…œ ์„ธ๊ณ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. 'ํƒ์ƒ‰' ์‹œ, ๋‹จ์‹œ๊ฐ„ ๋‚ด์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. B-tree์˜ ํ•ต์‹ฌ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆผ์— ํ‘œ์‹œ๋œ ์‚ฌ๊ฐํ˜•์œผ๋กœ ํ‘œ์‹œ๋œ ํ•œ ๊ฐœ ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ '๋…ธ๋“œ(Node)'๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ€์žฅ ์ƒ๋‹จ์˜ ๋…ธ๋“œ๋ฅผ '๋ฃจ..
[์ž๋ฃŒ๊ตฌ์กฐ] Java - ํ•ด์‹œํ…Œ์ด๋ธ”(HashTable) ์ด๋ก ์ •๋ฆฌ
ยท
Algorithm/KBro Study
ํ•ด์‹ฑ(Hashing)์ด๋ž€? ํ•ด์‹ฑ์ด๋ž€ ์ž„์˜์˜ ๊ธธ์ด์˜ ๊ฐ’์„ ํ•ด์‹œํ•จ์ˆ˜(Hash Function)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. ํ•ด์‹œํ…Œ์ด๋ธ”(HashTable)์ด๋ž€? ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ ์ƒ‰์ธ(index)์œผ๋กœ ์‚ผ์•„ (Key, Value)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์†๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ด์œ ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด(๋ฒ„ํ‚ท)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ๊ฐ๊ฐ์˜ Key๊ฐ’์— ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ๋ฐฐ์—ด์˜ ๊ณ ์œ ํ•œ index๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด index๋ฅผ ํ™œ์šฉํ•ด ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์‹ค์ œ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ์žฅ์†Œ๋ฅผ ๋ฒ„ํ‚ท ๋˜๋Š” ์Šฌ๋กฏ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ด์‹ฑ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €..
[์ž๋ฃŒ๊ตฌ์กฐ] Java - Heap(ํž™) ์ด๋ก ์ •๋ฆฌ + ๊ตฌํ˜„ + Priority Queue(์šฐ์„ ์ˆœ์œ„ ํ)
ยท
Algorithm/KBro Study
์ž๋ฃŒ๊ตฌ์กฐ ํž™(Heap) ์ด๋ž€? ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ์™„์ „ํžˆ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ)์˜ ์ผ์ข…์œผ๋กœ ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๋ฅผ ์œ„ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’๋“ค ์ค‘์—์„œ ์ตœ๋Œ€๊ฐ’์ด๋‚˜ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํž™์€ ํ˜•์ œ๋…ธ๋“œ ๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋งŒ ๊ณ ๋ คํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ •๋ ฌ ์ƒํƒœ๋ฅผ ๋ฐ˜์ •๋ ฌ ์ƒํƒœ ํ˜น์€ ๋А์Šจํ•œ ์ •๋ ฌ ์ƒํƒœ ๋˜๋Š” ์•ฝํ•œ ํž™์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค. ํž™ ํŠธ๋ฆฌ์—์„œ๋Š” ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉํ•œ๋‹ค. Heap์˜ ์ข…๋ฅ˜ ์ตœ๋Œ€ ํž™(max heap) ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ key(๋ถ€๋ชจ ๋…ธ๋“œ) >= key(์ž์‹ ๋…ธ๋“œ) ์ตœ์†Œ ํž™(min heap) ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‚ญ ๋…ธ๋“œ์˜ ํ‚ค..