๋ชฉ๋กDEV_IN/Algorithm (13)
let's get IT with DAVINA ๐ป
Graph๋? ์ฌ๋ฌ ๊ฐ์ ์ ๋ค์ด ์๋ก ๋ณต์กํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ ๊ด๊ณ๋ฅผ ํํํ ์๋ฃ๊ตฌ์กฐ ๋ชฉ์ โท ๊ทธ๋ํ์ ํ์์ ํ๋์ ์ ์ ์์ ์์ํ์ฌ ๊ทธ๋ํ์ ๋ชจ๋ ์ ์ ๋ค์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธ(ํ์)ํ๋ ๊ฒ! ๊ทธ๋ํ์ ๋ฐ์ดํฐ๋ ๋ฐฐ์ด์ฒ๋ผ ์ ๋ ฌ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์ํ๋ ์๋ฃ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด, ํ๋์ฉ ๋ชจ๋ ๋ฐฉ๋ฌธํด์ผ ํจ ๋ฐฉ์ โท BFS & DFS Graph์ ๊ตฌ์กฐ ์ง์ ์ ์ธ ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ ์ ์ฌ์ด๋ฅผ ์ด์ด์ฃผ๋ ์ ์ด ์์ต๋๋ค. ๊ฐ์ ์ ์ธ ๊ด๊ณ๋ผ๋ฉด, ๋ช ๊ฐ์ ์ ๊ณผ ์ ์ ๊ฑธ์ณ ์ด์ด์ง๋๋ค Graph terms ์ ์ (vertex) ๋ ธ๋(node)๋ผ๊ณ ๋ ํ๋ฉฐ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ทธ๋ํ์ ๊ธฐ๋ณธ ์์ ๊ฐ์ (edge) ์ ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค. (์ ์ ์ ์ด์ด์ฃผ๋ ์ ) ์ธ์ ์ ์ (adjacent vertex) ํ๋์ ์ ์ ์์ ๊ฐ์ ์ ์ํด ์ง..
Tree ๋? ๋จ๋ฐฉํฅ ๊ทธ๋ํ์ ํ ๊ตฌ์กฐ ํ๋์ ๋ฟ๋ฆฌ๋ก๋ถํฐ ๊ฐ์ง๊ฐ ์ฌ๋ฐฉ์ผ๋ก ๋ป์ ํํ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ์๋์ ์๋ ํ๋ ์ด์์ ๋ฐ์ดํฐ์ ํ ๊ฐ์ ๊ฒฝ๋ก์ ํ๋์ ๋ฐฉํฅ์ผ๋ก๋ง ์ฐ๊ฒฐ๋ ๊ณ์ธต์ ์๋ฃ๊ตฌ์กฐ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋์ด์ํจ ์ ํ ๊ตฌ์กฐ๊ฐ ์๋๋ผ, ํ๋์ ๋ฐ์ดํฐ ์๋์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ ์ ์๋ ๋น์ ํ ๊ตฌ์กฐ ํธ๋ฆฌ๊ตฌ์กฐ๋ ๊ณ์ธต์ ์ผ๋ก ํํ์ด ๋๊ณ , ์๋๋ก๋ง ๋ป์ด๋๊ฐ๊ธฐ ๋๋ฌธ์ ์ฌ์ดํด(cycle)์ด ์์ต๋๋ค. → ์ฐ๊ฒฐ ๊ทธ๋ํ(Connected Graph) ์ฌ์ดํด - ์์ ๋ ธ๋์์ ์ถ๋ฐํด ๋ค๋ฅธ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ๋ค์ ์์ ๋ ธ๋๋ก ๋์์ค๋ ๊ฒ Tree์ ๊ตฌ์กฐ์ ํน์ง Root ํธ๋ฆฌ ๊ตฌ์กฐ์ ์์์ ์ด ๋๋ ๋ ธ๋ Node ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋ ๋ชจ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ Parent Node (๋ถ๋ชจ ๋ ธ๋) ๋ ๋ ธ๋๊ฐ ์ํ๊ด๊ณ๋ก ์ฐ๊ฒฐ๋์ด ์์..
Queue๋? Definition ์ค์ ์์ ๊ธฐ๋ค๋ฆฌ๋ค, ๋๊ธฐํ๋ ฌ ๊ฐ์ฅ ๋จผ์ ์ง์ ํ ์๋์ฐจ๊ฐ ๊ฐ์ฅ ๋จผ์ ํจ๊ฒ์ดํธ๋ฅผ ํต๊ณผํฉ๋๋ค. ๊ฐ์ฅ ๋์ค์ ์ง์ ํ ์๋์ฐจ๋ ๋จผ์ ๋์ฐฉํ ์๋์ฐจ๊ฐ ๋ชจ๋ ๋น ์ ธ๋๊ฐ๊ธฐ ์ ๊น์ง๋ ํจ๊ฒ์ดํธ๋ฅผ ๋น ์ ธ๋๊ฐ ์ ์์ต๋๋ค. Stack๊ณผ ๋ฐ๋๋๋ ๊ฐ๋ ์ผ๋ก, FIFO(First In First Out)/LILO(Last In Last Out)์ ํน์ง์ ๊ฐ์ง ํฐ์ผ์ ์ฌ๋ ค๊ณ ์ค์ ์์ ๊ธฐ๋ค๋ฆฌ๋ ๋ชจ์ต๊ณผ ํก์ฌํ ์ด ์๋ฃ๊ตฌ์กฐ๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ฐฉํฅ์ด ๊ณ ์ ๋์ด ์์ผ๋ฉฐ, ๋ ๊ณณ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. Queue์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒ์ ‘enqueue’, ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ๊ฒ์ ‘dequeue’๋ผ๊ณ ํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋ ์์๋๋ก ์ฒ๋ฆฌํ ๋ ์ฃผ๋ก ์ฌ์ฉ! ํ์ ์ฑ์ง ์์์ ์ถ๊ฐ → O(1) ์์์ ์ ๊ฑฐ → O(1) ..
Stack ์ด๋? Definition ์๋ค, ์์ด๋ค, ํฌ๊ฐ์ง๋ค → ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์๋ ์๋ฃ๊ตฌ์กฐ ๊ณจ๋ชฉ์ ์๋ฃ๊ตฌ์กฐ Stack / ์๋์ฐจ๋ ๋ฐ์ดํฐ(Data) ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ ์๋์ฐจ๋ ๊ฐ์ฅ ๋์ค์ ๋์ฌ ์ ์๊ณ , ๊ฐ์ฅ ๋์ค์ ๋ค์ด๊ฐ ์๋์ฐจ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ฌ ์ ์๋ค. ์๋ฃ๊ตฌ์กฐ Stack์ ํน์ง์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ํ๋์ ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ์ ํ์ ์ ๊ทผ์ ์๋ค. ์ด๋ฐ Stack ์๋ฃ๊ตฌ์กฐ ์ ์ฑ ์ LIFO(Last In First Out) / FILO (First In Last Out)์ด๋ผ ๋ถ๋ฅธ๋ค. Stack์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒ์ ‘PUSH’, ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ๊ฒ์ ‘POP’์ด๋ผ๊ณ ํ๋ค. ์คํ์ ์ฑ์ง ์์์ ์ถ๊ฐ → O(1) ์์์ ์ ๊ฑฐ → O(1) ์ ์ผ ์๋จ์ ์์ ํ์ธ → O(1) ์ ์ผ ์๋จ์ด ์๋ ๋๋จธ์ง ์์..
์๋ฃ๊ตฌ์กฐ๋? ์ฌ๋ฌ ๋ฐ์ดํฐ์ ๋ฌถ์์ ์ ์ฅํ๊ณ , ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ๋ฐ์ดํฐ - ๋ฌธ์, ์ซ์, ์๋ฆฌ, ๊ทธ๋ฆผ, ์์ ๋ฑ ์ค์ํ์ ๊ตฌ์ฑํ๊ณ ์๋ ๋ชจ๋ ๊ฐ ๋ฐ์ดํฐ๋ ์ฌ์ฉํ๋ ค๋ ๋ชฉ์ (ํ์)์ ๋ฐ๋ผ ๋ถ์ํ๊ณ ์ ๋ฆฌํ์ฌ ํ์ฉํด์ผ๋ง ์๋ฏธ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์๋ฃ๊ตฌ์กฐ๋ ์๋ฃ์ ์งํฉ์ ๊ตฌ์กฐํํ๊ณ , ์ด๋ฅผ ํํํ๋๋ฐ ์ด์ ! ์ฌ๋์ด ์ฌ์ฉํ๊ธฐ์ ํธ๋ฆฌํ๋ ค๊ณ , ์ฌ์ฉํ๊ธฐ ์ข์ผ๋ ค๊ณ ๋ง๋ค์ด์ง ๊ฒ์ด ์๋ฃ๊ตฌ์กฐ๋ค! ์๋ฃ๊ตฌ์กฐ์ ๋ถ๋ฅ ์๋ฃ๊ตฌ์กฐ์ ํน์ง ํน์ ํ ์ํฉ์ ๋์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ์ ํนํ ๋ง์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์๋๋ฉด, ์ด๋ ํ ์ํฉ์ด ๋ฅ์ณค์ ๋ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ์ ์ฉํ์ฌ ๋ฌธ์ ํด๊ฒฐ ๊ฐ๋ฅ https://www.cs.usfca.edu/~galles/visualization/Algorithms.html Data Structure Visuali..