๐Ÿ“šAlgorithm ------------/๊ฐœ๋…์ •๋ฆฌ

์ž๋ฃŒ๊ตฌ์กฐ- ์ž๋ฃŒ๊ตฌ์กฐ ์ข…๋ฅ˜๋ฅผ ์•Œ์•„๋ณด์ž

bell22 2021. 7. 20. 22:48

์ž๋ฃŒ๊ตฌ์กฐ ์ข…๋ฅ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค

 

 

ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋„๋ก ํ•˜์ž

๊ต์ˆ˜๋‹˜... ์™œ ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ์•Œ๋ ค์ฃผ์‹œ์ง€ ์•Š์œผ์…จ๋‚˜์š”

 

** ๋‚˜๋ฌด์œ„ํ‚ค์™€ ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ๋ฅผ ์ฐธ๊ณ  ํ•˜์˜€๋‹ค **

 


 

1. ๋‹จ์ˆœ ๊ตฌ์กฐ

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ๋งํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋˜๋Š” ์ž๋ฃŒํ˜•์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น๋œ๋‹ค

 

๋‚˜๋Š” Python ๊ฐ™์ด ์ž๋ฃŒํ˜•์— ์œ ์—ฐํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ

๊ฐ€์žฅ ์ ์‘ ์•ˆ๋˜๋Š”๊ฒŒ ์ž๋ฃŒํ˜•์ด์—ˆ๋‹ค

C๋‚˜ C++์€ ์ž๋ฃŒํ˜•์— ์—„ํ•˜๋‹ค

 

์ž๋ฃŒํ˜•์˜ ์ข…๋ฅ˜๋Š” ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค

์ž๋ฃŒํ˜• ๋ฒ”์œ„๋‚˜ ํฌ๊ธฐ ๊ฐ™์€ ์ƒ์„ธ ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ๊ฒŒ์‹œ๋ฌผ๋กœ ์ •๋ฆฌํ•˜๊ฒ ๋‹ค

 


 

2. ์„ ํ˜•๊ตฌ์กฐ

์„ ํ˜•๊ตฌ์กฐ๋Š” ์œ„์— ๊ทธ๋ฆผ์—์„œ ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ, ๋ฑ ๋“ฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค

๊ทธ๋ฆผ์—๋Š” ์—†์ง€๋งŒ ๋ฐฐ์—ด๋„ ํฌํ•จ๋จ ใ…‡ใ…‡

๋ฆฌ์ŠคํŠธ๋Š” ์„ ํ˜• ๋ฆฌ์ŠคํŠธ(Linear List)์™€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)๊ฐ€ ์žˆ๋‹ค

 

์„ ํ˜• ๊ตฌ์กฐ๋Š” ์ž๋ฃŒ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€

์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ์—ฌ์„œ ์„ ํ˜•์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค

 

 

์„ ํ˜•๊ตฌ์กฐ

 

 

(1) ๋ฐฐ์—ด (Array)

 

 

๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค(index)๋ฅผ ๊ฐ€์ง„ ์›์†Œ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค

์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์กŒ๋‹ค๋Š” ๊ฒƒ์€ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ 0, 1, 2... ์ด๋ ‡๊ฒŒ

๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค

๊ทธ๋ž˜์„œ ๊ฐ ์›์†Œ์— ์ ‘๊ทผํ•˜๋Š”๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„์€ O(1)์ด๋ผ๊ณ  ์„ค๋ช…๋œ๋‹ค

 

์‹œ๊ฐ„ ๋ณต์žก๋„

- ์›์†Œ ์ ‘๊ทผ →  O(1)

- ์›์†Œ ์ฐพ์„ ๋•Œ ๋“œ๋Š” ์‹œ๊ฐ„ → O(1)

- ์›์†Œ ๋Œ€์ž…์‹œ ์œ„์น˜ ์ฐพ์•„์•ผ ํ•˜๋‹ˆ๊นŒ → O(1)

- ์›์†Œ ์‚ญ์ œ ์‹œ → O(n)

(์‚ญ์ œ ํ›„ ๋ฐฐ์—ด ๊ธธ์ด๊ฐ€ ํ•˜๋‚˜ ์ค„์–ด์„œ ๋‹ค ํ•œ ๋ฒˆ์”ฉ ์ด๋™ํ•˜๋‹ˆ๊นŒ)

 


** ์ฐธ๊ณ  **

์‹œ๊ฐ„ ๋ณต์žก๋„์˜ O ํ‘œ๊ธฐ

O๋Š” ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•ด์„œ ํ•จ์ˆ˜์˜ ์ฆ๊ฐ€ํ•˜๋Š” ๋ชจ์–‘์„ ๋น„๊ตํ•˜๋Š” ํ‘œ๊ธฐ ๋ฒ•์ด๋‹ค

ํฐ O-ํ‘œ๊ธฐ๋ฒ• (Big O ํ‘œ๊ธฐ๋ฒ•) ๋˜๋Š” ๋ž€๋‹ค์šฐ ํ‘œ๊ธฐ๋ฒ•(Landau)์œผ๋กœ ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค

์‹œ๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๊ฒŒ์‹œ๋ฌผ๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๊ฒ ๋‹ค


 

๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด array[3] ์ด๋ ‡๊ฒŒ ์›ํ•˜๋Š” ์œ„์น˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ์—ฐ์†๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด์„ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฑด ํ•  ์ˆ˜ ์—†๋‹ค

์ •์˜ํ•œ ํฌ๊ธฐ๋งŒํผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹จ ์–˜๊ธฐ ใ…‡ใ…‡

 

์ž๋ฃŒ๊ตฌ์กฐ malloc์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๋ฐ›๋Š” ๊ฑธ ์‹ซ์–ดํ•ด์„œ

๋ฐฐ์—ด์€ ์ •๋ง ์ž์ฃผ ์“ฐ๋Š” ๋“ฏ.

 

 

(2) ๋ฆฌ์ŠคํŠธ (List)

 

๋ฆฌ์ŠคํŠธ๋Š” ์–ด๋–ค ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์›์†Œ๋“ค์ด ์ผ๋ ฌ๋กœ ์ญˆ์šฑ ๋‚˜์—ดํ•œ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค

๋ฆฌ์ŠคํŠธ๋„ ๊ฐ ์›์†Œ์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ผ ์ˆ˜๋„ ์žˆ๊ณ 

์›์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค

(๊ทธ๋ž˜์„œ ๋ฐฐ์—ด์„ ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ์‹œํ‚ค๊ธฐ๋„ ํ•œ๋‹ค)

 

๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ์ข…๋ฅ˜๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ด๋‹ค

 

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ใ…‹

 

๋ง ๊ทธ๋Œ€๋กœ ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋Š” ๋ชจ์–‘์ด์–ด์„œ

๊ฐ node(๊ทธ๋ฆผ์—์„œ ์ง์œก๋ฉด์ฒด ๊ฒƒ๋“ค)๋“ค์ด ๋‹ค์Œ node์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ 

๊ทธ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…/์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

 

๋‚ด๊ฐ€ ์ œ์ผ ๋งŽ์ด ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ๊ฐ node์— ๊ธฐ์–ตํ•ด์•ผ ํ•  key์™€ value๋ฅผ ์ €์žฅํ•˜๊ณ 

(์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ๋žŒ ์ฃผ๋ฏผ๋ฒˆํ˜ธ ๊ฐ™์€ key๋ž„๊นŒ?)

๊ทธ key๋กœ ํ•ด๋‹น value๋ฅผ ์ฐพ์„ ๋•Œ ์“ด๋‹ค

 

C++์€ iterator ๊ฐœ๋…์ด ์žˆ์ง€๋งŒ C๋Š” ๊ทธ๋Ÿฐ ๊ฒŒ ์—†์–ด์„œ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋‹ค ๋ณด๋‹ˆ

core๊ฐ€ ์ฐธ ๋งŽ์ด ๋‚œ๋‹ค ใ…Žใ…Ž

 

์‹œ๊ฐ„ ๋ณต์žก๋„

- node ๊ฒ€์ƒ‰ → O(1) ๋˜๋Š” O(n)

(๋ฐ”๋กœ ์ฐพ์œผ๋ฉด ์ด๋“์ธ๋ฐ ๋๊นŒ์ง€ ๋‹ค ์ฐพ๊ฒŒ ๋˜๋ฉด n ์‹œ๊ฐ„์ž„)

- node ์‚ฝ์ž… → O(1)

- node ์‚ญ์ œ → O(1)

 

* O(1)๊ฐ€ ํ•œ๋ฒˆ ๊ฑธ๋ฆฌ๋Š” ์†๋„๋ผ๋Š” ์˜๋ฏธ๋Š” ์•„๋‹˜. ์ƒ์ˆ˜๋ฅผ ๋œปํ•˜๋Š” ๊ฒƒ์ผ ๋ฟ

 

 

(3) ์Šคํƒ (Stack)

 

์Šคํƒ์€ ํ•œ ๋ฒˆ์ฏค ๋“ค์–ด๋ดค์„ LIFO(Last In First Out)๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค

๋‚˜์ค‘์— ์˜จ ๋†ˆ์ด ๋จผ์ € ๋‚˜๊ฐ„๋‹ค~

(ํ๋Š” ์„ ์ž…์„ ์ถœ์ธ FIFO์ด๋‹ค)

์Šคํƒ ๋ชจ์–‘ ์ž์ฒด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์—ฌ์žˆ๋Š” ๋ชจ์–‘์ด๋‹ค

์Šคํƒ ๊ตฌ์กฐ

๋ฆฌ์ŠคํŠธ์—์„œ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€/๊ฒ€์ƒ‰/์ถœ๋ ฅ/์‚ญ์ œ ํ•˜๋“ฏ์ด, ์Šคํƒ๋„ ์ž…๋ ฅ ์—ฐ์‚ฐ์ด ์žˆ๋Š”๋ฐ,

์ถ”๊ฐ€ ๊ฐœ๋…์„ Push, ์ถœ๋ ฅ ๊ฐœ๋…์„ Pop ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

๋งจ ์œ„์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์—ฐ์‚ฐ์€ Peek๋ผ๊ณ  ํ•œ๋‹ค... ํ”ผํฌ๋Š” ์ฒ˜์Œ ์•Œ์•˜๋‹ค;;

 

๊ตฌํ˜„ํ•  ๋•Œ index ๊ด€๋ฆฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž˜ํ•˜๋ฉด ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์— ๋น„ํ•ด

์‰ฝ๋‹ค๊ณ  ํ•˜๋‹ˆ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋น„๊ตํ•œ ๊ทธ๋ฆผ๋งŒ ๋ณด๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ๋‹ค

 

 

์‹œ๊ฐ„ ๋ณต์žก๋„

- Push → O(1)

- Pop → O(1)

- Peek → O(n)

 


** ์ฐธ๊ณ  **

Stack Overflow (์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ)

์Šคํƒ ํฌ์ธํ„ฐ๊ฐ€ ์Šคํƒ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด์„ค ๋•Œ ์ผ์–ด๋‚˜๋Š” ํ˜„์ƒ?์œผ๋กœ

 

 


(4) ํ (Queue)

 

ํ๋Š” ๋‚ด๊ฐ€ ์ œ์ผ ์ข‹์•„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค

์–˜๊ฐ€ ๋– ์˜ค๋ฅธ๋‹ฌ๊นŒ

์œ„์—์„œ ์Šคํƒ์€ ํ›„์ž…์„ ์ถœ์ธ LIFO๋ผ๊ณ  ์–ธ๊ธ‰ํ•˜์˜€๋‹ค

ํ๋Š” ๊ทธ ๋ฐ˜๋Œ€์ธ ์„ ์ž…์„ ์ถœ์ธ FIFO (First In First Out) ๊ฐœ๋…์ด๋‹ค

๋จผ์ € ์˜จ ๋†ˆ์ด ๋จผ์ € ๋‚˜๊ฐ„๋‹ค~

(ํ ์˜์–ด ๋œป์€ ํ‘œ๋ฅผ ์‚ฌ๋Ÿฌ ์ผ๋ ฌ๋กœ ๋Š˜์–ด์„  ์‚ฌ๋žŒ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ค„์ด๋ผ๊ณ  ํ•œ๋‹ค)

 

์Šคํƒ์—์„œ๋Š” Push/Pop/Peek ๊ฐœ๋…์ด ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค

ํ๋Š” Put(Insert)/Get(Delete) ์—ฐ์‚ฐ์ด ์‚ฌ์šฉ๋œ๋‹ค

๋˜ํ•œ ํ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜๊ฐ€๊ณ  ๋“ค์–ด๊ฐ€๊ณ  ํ•˜๋Š” ๊ฑธ

Enqueue/Dequeue ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

 

ํ—ค์ด ๋ ˆ๋”” ํ

๋ฐ”๋กœ ์š”๋ ‡๊ฒŒ..!

 

๋จผ์ € ๋“ค์–ด์˜จ ์นœ๊ตฌ๋ฅผ Front, ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ์นœ๊ตฌ๋ฅผ Back์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค

FIFO๋‹ˆ๊นŒ ๋จผ์ € ๋“ค์–ด์˜จ Front๊ฐ€ ๋จผ์ € Dequeue ๋œ๋‹ค

 

 

์‹œ๊ฐ„ ๋ณต์žก๋„

Push → O(1)

Pop → O(1)

- Search → O(n)

 


ํ๋Š” ๋งจ ์•ž์— ์• ๊ฐ€ ๋‚˜๊ฐ€๋ฉด ์•ž์— ์ž๋ฆฌ๊ฐ€ ๋น„์–ด์„œ ์ •๋ ฌ์„ ๋‹ค์‹œ ํ•ด์ค˜์•ผ ํ•จ...

๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ฑฐ ๋ฐฉ์‹์ด ์›ํ˜• ํ์ด๋‹ค

 

์›ํ˜• ํ

๋ง ๊ทธ๋Œ€๋กœ ์›ํ˜•์œผ๋กœ ๋œ ํ์ด๋‹ค

 

์›ํ˜• ํ (๋งํฌ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•˜๋‹ˆ ํฌ๊ฒŒ ๋ณด์„ธ์š”)

 

์›ํ˜• ํ์—๋Š” Front ์™€ Back ์šฉ์–ด ๋Œ€์‹  Front์™€ Rear๋ผ๋Š” ์šฉ์–ด๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค

 

Front → ๊ฐ’์ด ์žˆ๋Š” ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ์œ„์น˜ (๋ฌด์กฐ๊ฑด 0์ด์–ด์„œ front๊ฐ€ ์•„๋‹˜)

Rear (ํ›„๋ฐฉ) → ๊ฐ’์ด ์žˆ๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์œ„์น˜

 

์ฒ˜์Œ ์‹œ์ž‘ ์œ„์น˜๋Š” front์™€ rear๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋‹ค์Œ์— ๋“ค์–ด์˜จ ์นœ๊ตฌ๊ฐ€ ์žˆ์œผ๋ฉด rear ๊ฐ’์„ +1 ์‹œํ‚จ๋‹ค

ํ๋Š” ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ์นœ๊ตฌ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—

deQueue๊ฐ€ ๋˜๋ฉด front์— ์žˆ๋Š” ๊ฐ’์ด ๋‚˜๊ฐ„๋‹ค 

๊ทธ๋Ÿฌ๋ฉด front ๊ฐ’์„ +1 ์‹œํ‚ค๋ฉด ๋จใ…‹

 

์ด๋Ÿฐ ์‹์œผ๋กœ ๋งˆ์น˜ ๋น™๋น™ ๋Œ๋ฉด์„œ ํ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ˜• ํ๋ผ๊ณ  ํ•œ๋‹ค

๊ธฐ๋ณธ ํ (์„ ํ˜• ํ)๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์ด๋‹ค


 

(5) ๋ฑ (Deque)

 

๋ฑ์€ ํ์™€ ๋‹ค๋ฅด๊ฒŒ front์™€ back ๋‘˜ ๋‹ค์—์„œ ์‚ญ์ œ์™€ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค

๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์ด๊ณ , ์ค‘๊ฐ„์ค‘๊ฐ„ ์‚ฝ์ž…/์‚ญ์ œ๋„ ์Œ‰ํŒŒ์จ๋ธ”

( ์•ž/๋’ค ๋ณด๋‹ค ์ค‘๊ฐ„ ๋…ธ๋“œ ์—ฐ์‚ฐ์€ ์„ฑ๋Šฅ์ด ์•ˆ ์ข‹์Œ )

 

์–˜๋Š” ๊ทธ๋ฆผ๋งŒ ์ฒจ๋ถ€ํ•˜๊ณ  ์ •๋ฆฌ๋ฅผ ๋งˆ์น˜๊ฒ ๋‹ค

 

 

์‹œ๊ฐ„ ๋ณต์žก๋„

Push → O(1)

Pop → O(1)

- Search O(1)

 

 


3. ๋น„์„ ํ˜• ๊ตฌ์กฐ

 

 

๋น„์„ ํ˜• ๊ตฌ์กฐ๋Š” ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๊ณ , ์ž๋ฃŒ์˜ ์ˆœ์„œ๊ฐ€ ๋ถˆ๊ทœ์น™ํ•ด์„œ

์ž๋ฃŒ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ๋œปํ•œ๋‹ค

 

๋Œ€ํ‘œ์ ์œผ๋กœ ํŠธ๋ฆฌ์™€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค

์ž๋ฃŒ๊ตฌ์กฐ ๊ณต๋ถ€ํ•  ๋•Œ ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๊ณต๋ถ€ ์•ˆ ํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค

์ด์ œ ์•Œ๋ฉด ๋˜๋Š” ๊ฑฐ์ง€ ^^7

 

 

(1) ํŠธ๋ฆฌ

 

ํŠธ๋ฆฌ๋Š” ์œ„์— ์ฒจ๋ถ€ํ•œ ๋น„์„ ํ˜• ๊ตฌ์กฐ์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋ชจ์–‘์„ ๊ฐ€์ง„๋‹ค

๋‚˜๋ฌด์ฒ˜๋Ÿผ ๊ฐ€์ง€๋ฅผ ๋ป—์€ ๋ชจ์–‘์ด ์—ฐ์ƒ๋ผ์„œ ํŠธ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๋“ฏ

๋‚˜๋ฌด๋ฅผ ๋’ค์ง‘์–ด ๋†“์€ ๋ชจ์–‘์ด๋ž„๊นŒ!?

 

ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค

 

 

ํŠธ๋ฆฌ์—๋Š” ์šฉ์–ด ์ •๋ฆฌ๊ฐ€ ์กฐ๊ธˆ ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค


๋…ธ๋“œ(node): ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ์ด ๋˜๋Š” ์นœ๊ตฌ (๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ทธ ๋…ธ๋“œ ๋งž์Šต๋‹ˆ๋‹ค)
๋ฃจํŠธ ๋…ธ๋“œ(root node/root): ๋ฟŒ๋ฆฌ(?). ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ์ž„
๋ถ€๋ชจ ๋…ธ๋“œ(parent node): ๋ฃจํŠธ์— ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋…ธ๋“œ
์ž์‹ ๋…ธ๋“œ(child node): ๋ถ€๋ชจ ๋…ธ๋“œ์— ๋ถ™์–ด ์žˆ๋Š” ๋…ธ๋“œ
ํ˜•์ œ ๋…ธ๋“œ(siblings node): ๊ฐ™์€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๋…ธ๋“œ๋“ค
๋ฆฌํ”„ (leaf) ํ˜น์€ ๋‹จ๋ง(terminal) ๋…ธ๋“œ:  ์žŽ. ์ฐจ์ˆ˜๊ฐ€ 1์ธ ๋…ธ๋“œ. ์ œ์ผ ๋ ๋…ธ๋“œ๋‹ค

 

๋งํฌ(link): ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ . Edge ๋˜๋Š” branch๋ผ๊ณ  ๋ถ€๋ฆ„. ๊ฐ„์„ 
๊ฒฝ๋กœ(path): ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ํ•œ ๋…ธ๋“œ์— ์ด๋ฅด๋Š” ๊ธธ ์‚ฌ์ด์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ์ˆœ์„œ
๊ธธ์ด(length): ์ถœ๋ฐœ ๋…ธ๋“œ์—์„œ ๋„์ฐฉ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ์น˜๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
๊นŠ์ด(depth): [๋ฃจํŠธ ๋…ธ๋“œ - ํ˜„์žฌ ๋…ธ๋“œ]๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ
๋ ˆ๋ฒจ(level): 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋งํฌ์˜ ๋‹จ๊ณ„
๋†’์ด(height): [๋ฃจํŠธ ๋…ธ๋“œ - ๋ฆฌํ”„ ๋…ธ๋“œ] ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ
์ฐจ์ˆ˜(degree): ๊ฐ ๋…ธ๋“œ์˜ ์ž์‹์˜ ๊ฐœ์ˆ˜[5]
ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜(degree of tree): ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜ = max[deg1, deg2, ..., degn]
ํฌ๊ธฐ(size): ๋…ธ๋“œ์˜ ์ „์ฒด ๊ฐœ์ˆ˜
๋„ˆ๋น„(width): ๊ฐ€์žฅ ๋งŽ์€ ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ ˆ๋ฒจ์˜ ํฌ๊ธฐ


๋˜ํ•œ ์ด์ง„ํŠธ๋ฆฌ(Binary Tree)์™€ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree) ๋“ฑ์˜ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค

์ •๋ฆฌํ•˜๋ ค๊ณ  ๋ณด๋‹ˆ ์ข…๋ฅ˜๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋‹ค์–‘ํ•ด์„œ ์š”๊ฒƒ๋„ ๋”ฐ๋กœ ์ •๋ฆฌํ•˜๋Š” ๊ฑธ๋กœ

 

 

(2) ๊ทธ๋ž˜ํ”„

 

๊ทธ๋ž˜ํ”„๋Š” ํŠธ๋ฆฌ์™€ ๋น„์Šทํ•˜๊ฒŒ ๋…ธ๋“œ์™€ ์—ฃ์ง€๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ

๋ถ€๋ชจ/์ž์‹ ๊ด€๊ณ„๋กœ ๊ณ„์ธต์ด ์ด๋ฃจ์–ด์ง„ ๊ฒŒ ์•„๋‹ˆ๋ผ

๋…ธ๋“œ์™€ ๋…ธ๋“œ๋“ค๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ๊ตฌ์„ฑ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค 

 

ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋Š” ์ฐจํŠธ ํ˜•์‹์˜ ๊ทธ๋ž˜ํ”„๋„ ๊ทธ๋ž˜ํ”„ ๋งž์Šต๋‹ˆ๋‹ค

๋‹ค๋งŒ ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„๋จน์„ ๊ทธ๋ž˜ํ”„๋กœ ๋ฐ”๊พผ ๊ฒƒ๋ฟ

 

๋…ธ๋“œ๋“ค ์‚ฌ์ด์—๋Š” ๋ฐฉํ–ฅ/๋ฌด๋ฐฉํ–ฅ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์„œ

๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜๋„ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์™€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค

 

์ขŒ: ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„, ์šฐ: ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

 

๋ฐ”๋กœ ์š”๋ ‡๊ฒŒ...

 

๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

๊ฐ„์„ ์— ๋ฐฉํ–ฅ์„ฑ์ด ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„ (ํ™”์‚ดํ‘œ๋กœ ํ‘œํ˜„๋จ)

A → B๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์€ (A, B)๋กœ ํ‘œ๊ธฐ

 

๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

์–‘๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„์„ ์„ ํ†ตํ•ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„

A์™€ B๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์€ (A, B)์™€ (B, A)๋กœ ํ‘œ๊ธฐ

 

๋˜ํ•œ ๊ทธ๋ž˜ํ”„์—๋Š” ํŠธ๋ฆฌ ์šฉ์–ด์— ์ด์–ด์„œ ์ถ”๊ฐ€๋œ ์šฉ์–ด๊ฐ€ ์žˆ๋‹ค


์ •์ (vertext): ๊ทธ๋ž˜ํ”„์—์„œ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ„

์ธ์ ‘ ์ •์ (adjacent vertex): ์—ฃ์ง€์— ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ์ •์ 

์‚ฌ์ดํด(cycle): ํ•œ ์ •์ ์—์„œ ์‹œ์ž‘~๋‹ค์‹œ ๋„์ฐฉํ•ด์„œ ๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ

์ž…๋ ฅ ์ฐจ์ˆ˜(in-degree): ์ •์ ์— ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜

์ถœ๋ ฅ ์ฐจ์ˆ˜(in-degree): ์ •์ ์—์„œ ๋‚˜๊ฐ€๋Š” ๊ฐ„์„ ์˜ ์ˆ˜


๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ๊ผญ ์•Œ์•„์•ผ ํ•  ๊ฐœ๋…์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

 

A. ์ธ์ ‘ ํ–‰๋ ฌ (Adjacency Matrix)

→ Edge ์ถ”๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์Œ

 

 

๊ทธ๋ž˜ํ”„๋Š” ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋‹ค

ํ–‰๋ ฌ์€ 0๊ณผ 1๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š๊ฐ”์Šต๋‹ˆ๊นŒ?

๊ทธ๋ž˜์„œ ์—ฃ์ง€๊ฐ€ ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋ฉด ๋ฐฐ์—ด๋กœ (0, 1) ์ด๋Ÿฐ ์‹์œผ๋กœ

์“ธ ์ˆ˜ ์žˆ๋‹ค ์ด๋ง์ด๋‹ค

์—ฃ์ง€๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ (์˜ˆ๋ฅผ ๋“ค์–ด (0, 2))๋Š” ํ–‰๋ ฌ์— 0์œผ๋กœ ํ‘œ๊ธฐ ใ…‡ใ…‡

 

๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ๋ชจ๋“  ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฑด ์žฅ์ ์ด์ง€๋งŒ

ํ•ญ์ƒ n^2์˜ 2์ฐจ์› ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์žกํžˆ๋‹ˆ๊นŒ ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ์žˆ์„ ์ˆ˜๋„

 

์ „์— CNN ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ ์šฉ์–ด๊ฐ€ ์ž ๊น ๋‚˜์™”์—ˆ๋Š”๋ฐ

์ด์ œ ์ดํ•ด๊ฐ€ ๊ฐ€๋Š”๊ตฌ๋‚˜...

 

์‹œ๊ฐ„ ๋ณต์žก๋„

(N์€ ๋…ธ๋“œ ๊ฐœ์ˆ˜, E๋Š” Edge์˜ ์ „์ฒด ๊ฐœ์ˆ˜)

- Node ์ถ”๊ฐ€ → O(N^2)

- Node ์‚ญ์ œ → O(N^2)

- Edge ์ถ”๊ฐ€ → O(1)

- Edge ์‚ญ์ œ → O(1)

 

ํŠน์ • ์…€๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒ์ˆ˜ ์‹œ๊ฐ„์ธ๋ฐ, ๋…ธ๋“œ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋‹ˆ๊นŒ

๋ชจ๋“  ์…€ ๋‹ค ์ฑ„์›Œ์ค˜์•ผ ํ•ด์„œ ์˜ค๋ž˜๊ฑธ๋ ค๋ฒ„๋ฆผ...์ดํฌ

 

 

B. ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ (Adjacency List)

→ Node ์ถ”๊ฐ€ ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์Œ

 

 

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•œ ๊ฑฐ๋‹ค

๊ฐ ๋…ธ๋“œ๋“ค์€ ํ—ค๋” ๋…ธ๋“œ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ์ •์ ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฆฌ์ŠคํŠธ๋Š” ์กด์žฌํ•œ๋‹ค

 

์กด์žฌํ•˜๋Š” ๊ฐ„์„ ๋งŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ–‰๋ ฌ๋ณด๋‹ค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฉด์—์„œ ํšจ์œจ์ ์ž„

๊ทผ๋ฐ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„  ์กฐํšŒ๋‚˜ ์ฐจ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰์„ ํ•ด์•ผ ํ•ด์„œ

์ชผ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜๋ด

(์ผ๋‹จ ๊ตฌํ˜„์ด ์–ด๋ ค์›€)

 

์‹œ๊ฐ„ ๋ณต์žก๋„

(N์€ ๋…ธ๋“œ ๊ฐœ์ˆ˜, E๋Š” Edge์˜ ์ „์ฒด ๊ฐœ์ˆ˜)

- ๋…ธ๋“œ ์ถ”๊ฐ€ → O(1)

- ๋…ธ๋“œ ์‚ญ์ œ → O(N+E)

(๋…ธ๋“œ ์‚ญ์ œํ•˜๋ฉด ์‚ญ์ œ๋œ ๊ณต๊ฐ„์„ ๋‹ค์‹œ ์ฑ„์›Œ์ค˜์•ผ ํ•˜๋‹ˆ๊นŒ ์ด๋งŒํผ)

- ์—ฃ์ง€ ์ถ”๊ฐ€ → O(1)

- ์—ฃ์ง€ ์‚ญ์ œ → O(E)

(ํ•œ ์ค„๋กœ ๋‹ค ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์œผ๋ฉด ๋‹ค ๋’ค์ ธ์•ผ ํ•จ)

 


4. ํŒŒ์ผ ๊ตฌ์กฐ

 

ํŒŒ์ผ ๊ตฌ์กฐ๋Š” ์ปดํ„ฐ ๋ณด์กฐ๊ธฐ์–ต ์žฅ์น˜์— ์ €์žฅ๋˜๋Š” ํŒŒ์ผ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค

ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค

 

 

 

 

 


[ ์ถœ์ฒ˜ ]

 

https://namu.wiki/w/%EB%B0%B0%EC%97%B4

https://www.onlybook.co.kr/entry/algorithm-interview

 

ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ

ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ 95๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด๋กœ ์™„์„ฑํ•˜๋Š” ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฐ•์ƒ๊ธธ ์ง€์Œ | ์ •์ง„ํ˜ธ ์ผ๋Ÿฌ์ŠคํŠธ 724์ชฝ | 38,000์› | 2020๋…„ 7์›” 15์ผ ์ถœ๊ฐ„ | 180*235*35 | ISBN 9791189909178 ํŒ๋งค์ฒ˜ [๊ต๋ณด๋ฌธ๊ณ ] [Y..

www.onlybook.co.kr

 

'๐Ÿ“šAlgorithm ------------ > ๊ฐœ๋…์ •๋ฆฌ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Composite Pattern  (0) 2023.03.01