๐Ÿ’ฟ Data/๋ถ€ํŠธ์บ ํ”„

๐Ÿ’ฟ Data/๋ถ€ํŠธ์บ ํ”„

    [TIL] 104. [์ž๋ฃŒ๊ตฌ์กฐ] ์ˆœํšŒ

    ํ‚ค์›Œ๋“œ ์ˆœํšŒ(ํŠธ๋ฆฌ : ์ „์œ„/์ค‘์œ„/ํ›„์œ„, ๊ทธ๋ž˜ํ”„ : BFS/DFS) ์ˆœํšŒ(Traversal) ํŠธ๋ฆฌ, ๊ทธ๋ž˜ํ”„์™€ ๊ฐ™์ด ์—ฐ๊ฒฐ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ ์ˆœํšŒ์˜ ๋ชฉ์  : ๋ชจ๋“  ํ˜น์€ ํŠน์ • ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์ง„๋‹ค. [์ˆœํšŒ] ํŠธ๋ฆฌ๊ตฌ์กฐ ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ์˜ ์ˆœํšŒ๋Š” ํฌ๊ฒŒ ์ „์œ„, ์ค‘์œ„, ํ›„์œ„๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค. ์ „์œ„ : 1. Root node -> 2. Left node -> 3. Right node ์ค‘์œ„ : 1. Left node -> 2. Root node -> 3. Right node ํ›„์œ„ : 1. Left node -> 2. Right node -> 3. Root node ๋‹จ์ˆœํ•˜๊ฒŒ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์ด๋ฉด์„œ Root node์˜ ์œ„์น˜์— ๋”ฐ๋ผ ๋‚˜๋ˆ„์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค..

    [TIL] 103. [์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„

    ํ‚ค์›Œ๋“œ ๊ทธ๋ž˜ํ”„ ์ธ์ ‘ํ–‰๋ ฌ/์ธ์ ‘๋ฆฌ์ŠคํŠธ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ž˜ํ”„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ vert(๋…ธ๋“œ, ์ •์ )์™€ edge(๊ฐ„์„ , ๋งํฌ)๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ž˜ํ”„๋Š” ๋…ธ๋“œ๊ฐ„์˜ ๊ด€๊ณ„, ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ๊ฐ„์˜ ๊ณ„์ธต์„ ํ‘œํ˜„ ๋ฐฉํ–ฅ์„ฑ(๋‹จ๋ฐฉํ–ฅ, ์–‘๋ฐฉํ–ฅ) ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ Leaf node๊ฐ€ ๋œ๋‹ค. ์–‘๋ฐฉํ–ฅ ํ˜•ํƒœ์˜ ๊ฒฝ์šฐ, ๊ทธ ์ฃผ๋ชฉ์ ์ด ๋…ธ๋“œ๊ฐ„์˜ ์ƒํ˜ธ ๊ตํ™˜(์„œ๋กœ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๊ณต์œ ) ๋ฌด๋ฐฉํ–ฅ์„ฑ ๋ฐฉํ–ฅ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค(์ด์›ƒ ๋…ธ๋“œ๋“ค)๋ผ๋ฆฌ ์„œ๋กœ ์ธ์ ‘ ์ˆœํ™˜์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ๋กœ, ์œ„์™€ ๊ฐ™์ด ์ˆœํ™˜์„ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. [๊ทธ๋ž˜ํ”„] ์ธ์ ‘๋ฆฌ์ŠคํŠธ, ์ธ์ ‘ํ–‰๋ ฌ ๊ทธ๋ž˜ํ”„ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ธ์ ‘๋ฆฌ์ŠคํŠธ ๊ทธ๋ž˜ํ”„์˜ ํ˜•ํƒœ๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ ์ „์ฒด ๋…ธ๋“œ์˜ ๋ชฉ๋ก์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. ํŒŒ์ด์ฌ์˜ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•œ ์˜ˆ์‹œ) class Graph: d..

    [TIL] 102. [์ž๋ฃŒ๊ตฌ์กฐ] ํ•ด์‹œํ…Œ์ด๋ธ”

    ํ‚ค์›Œ๋“œ ํ•ด์‹œ ํ•ด์‹œํ•จ์ˆ˜ ํ•ด์‹œํ…Œ์ด๋ธ” ํ•ด์‹œ์ถฉ๋Œ(์ฒด์ด๋‹, ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ) ํ•ด์‹œํ…Œ์ด๋ธ” ํ‚ค(key)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ’(value)์— ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ํ•ด์‹ฑ์˜ ์ฃผ๋œ ๋ชฉ์ ์€ ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ์˜ ์–‘๊ณผ ์ƒ๊ด€์—†์ด ์„ฑ๋Šฅ์ด ๋น ๋ฅด๋‹ค.(ํ‚ค๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๊ธฐ๋•Œ๋ฌธ) ํŒŒ์ด์ฌ์˜ ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‹œํ…Œ์ด๋ธ” ๊ตฌ์กฐ ํ•ด์‹œํ•จ์ˆ˜ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ‚ค๋ฅผ ํ•ด์‹œํ…Œ์ด๋ธ” ๋‚ด์˜ ๋ฒ„ํ‚ท(=hashes)๋กœ ๋งคํ•‘ ํ•ด์‹œํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ฐ’ ํ˜•ํƒœ๋Š” ๋‹ค์–‘ํ•˜์ง€๋งŒ, ์ถœ๋ ฅ๊ฐ’์˜ ํ˜•ํƒœ๋Š” ์ˆซ์ž ์ž…๋ ฅ๊ฐ’๊ณผ ์ถœ๋ ฅ๊ฐ’์ด ์ผ๋Œ€์ผ ๋Œ€์‘์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ์‹ค์ œ๋กœ๋Š” ์™„๋ฒฝํ•œ ์ผ๋Œ€์ผ ๋Œ€์‘์€ ์–ด๋ ค์šฐ๋ฉฐ, ๋‹ค๋ฅธ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•ด ๊ฐ™์€ ์ถœ๋ ฅ์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ํ•ด์‹œ์ถฉ๋Œ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด์‹œํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด ์ž…๋ ฅ๊ฐ’์„ ์ •์ˆ˜ํ˜• ์ถœ๋ ฅ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜ ํ•ด์‹œ์„ฑ๋Šฅ O(1) ์‹œ๊ฐ„๋ณต์žก๋„ ์•ˆ์— ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.(ํ•ด..

    [TIL] 101. [๋ถ„ํ•  ์ •๋ณต, ์ •๋ ฌ] ํ€ต ์ •๋ ฌ, ๋ณ‘ํ•ฉ ์ •๋ ฌ

    ํ‚ค์›Œ๋“œ ๋ถ„ํ•  ์ •๋ณต ํ€ต ์ •๋ ฌ ๋ณ‘ํ•ฉ ์ •๋ ฌ ๋ถ„ํ•  ์ •๋ณต ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ• ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ณ‘๋ ฌ์ ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ(๋‹จ, ๋ฌธ์ œํ•ด๊ฒฐ์„ ์œ„ํ•ด ํ•จ์ˆ˜๊ฐ€ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€) ๋ถ„ํ• (Divide) : ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ž‘๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ณผ์ • ์ •๋ณต(Conquer) : ์ž‘๊ฒŒ ๋‚˜๋ˆˆ ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜์”ฉ return ํ•˜์—ฌ ์ •๋ณต(ํŠน์ •๊ฐ’์„ ๋„์ถœ) ๋จผ์ € Divide๋ฅผ ํ•œ ํ›„ ๊ทธ์˜ ์—ญ์ˆœ์œผ๋กœ ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜ ์ •๋ณตํ•ด์„œ ์ตœ์ข… ๊ฒฐ๊ณผ๊ฐ’์„ ๋„์ถœ ๋‹จ, ๊ณผ์—ฐ ์ด ๋ฌธ์ œ๋ฅผ ๋ถ„ํ•  ์ •๋ณต์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ธ ๊ฒƒ์ด๋„ ์ƒ๊ฐํ•ด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค! ์•„๋ž˜๋Š” ์žฌ๊ท€์™€ ๋ถ„ํ•  ์ •๋ณต์˜ ์ฐจ์ด(๋ถ„ํ•  ์ •๋ณต์€ ๋ณดํ†ต ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉ) [์ •๋ ฌ, ๋ถ„ํ• ์ •๋ณต] ํ€ต ์ •๋ ฌ(Quick Sort) ํ”ผ๋ฒ—(pivot)์ด๋ผ๋Š” ๊ฐ’์„ ํŠน์ •์ง€์–ด์ฃผ๊ณ (๋ณด..

    [TIL] 100. [์•Œ๊ณ ๋ฆฌ์ฆ˜] ํƒ์ƒ‰

    ํ‚ค์›Œ๋“œ ํƒ์ƒ‰ ์„ ํ˜•ํƒ์ƒ‰ ์ด์ง„ํƒ์ƒ‰ [์•Œ๊ณ ๋ฆฌ์ฆ˜] ํƒ์ƒ‰ ์ž๋ฃŒ๋ฅผ ํ•˜๋‚˜์”ฉ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฌธ์ œ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผํ•œ๋‹ค. [ํƒ์ƒ‰] ์„ ํ˜•ํƒ์ƒ‰(Linear Search) ๊ธฐ๋ณธ์ ์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ def linear_search(arr, value): for i in range(len(arr)): if arr[i] == value: return i [ํƒ์ƒ‰] ์ด์ง„ํƒ์ƒ‰(Binary Search) ํƒ์ƒ‰์„ ํ•  ๋•Œ, ๋ฐ˜์”ฉ ์ค„์—ฌ๋‚˜๊ฐ€๋ฉด์„œ ํƒ์ƒ‰ ๋งˆ์น˜ ์—…๋‹ค์šด ๊ฒŒ์ž„์—์„œ ๊ฐ€์šด๋ฐ ๊ฐ’์„ ๋งํ•˜๋ฉด ์ ์  ์ขํ˜€๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹ ๋‹จ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•œ๋‹ค. O(logn)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.(๊ทธ๋ฃน์„ 2๊ฐœ์”ฉ ๋‚˜๋ˆ„๋ฉด์„œ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ) def binary_search(arr, valu..