๊ทธ๋ํ(Graph)๊ทธ๋ํ๋ ๋
ธ๋์ ๊ฐ์ ์ ์งํฉ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค.๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ํํํ๋ ํํ๋ก, ๊ฐ ์ ์ ๊ฐ์๋ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋ค.๋๋น ์ฐ์ ํ์(BFS), ๊น์ด ์ฐ์ ํ์(DFS) ์๊ณ ๋ฆฌ์ฆ์์ ๊ทธ๋ํ๋ฅผ ์ํํ๋ ๋ฐฉ์์์ ์ฌ์ฉํ๋ค. ๊ทธ๋ํ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋
ธ๋/์ ์ (Vertex): ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ธฐ๋ณธ ๊ฐ์ฒด๊ฐ์ (Edge): ์ ์ ์ ์ฐ๊ฒฐํ๋ ์ ์ธ์ ์ ์ : ๊ฐ์ ์ ์ํด ์ง์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ก, ํ ์ ์ ์์ ๊ฐ์ ์ ํ ๋ฒ์ ๊ฐ ์ ์๋ค๋ฉด ํด๋น ์ ์ ๋ค์ ์ธ์ ํ๋ค๊ณ ํ ์ ์๋ค.๋จ์ ๊ฒฝ๋ก: ๊ฒฝ๋ก ์ค์์ ๋ฐ๋ณต๋๋ ์ ์ ์ด ์๋ ๊ฒฝ์ฐ ๊ทธ๋ํ ์ข
๋ฅ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ชจ๋ ๊ฐ์ ์ด ์๋ฐฉํฅ์ธ ๊ทธ๋ํ๋ก, ๋ฐฉํฅ์ด ์๊ธฐ ๋๋ฌธ์ ์์ชฝ์ ๋ฐฉํฅ ๋ชจ๋ ์ด๋์ด ๊ฐ๋ฅํ๋ค.๋ฐฉํฅ ๊ทธ๋ํ๊ฐ์ ๋ค์ ๋ฐฉํฅ์ด ์กด์ฌํ๋ ๊ทธ๋ํ๋ก, ..
๐ฅ๏ธ CS/์๋ฃ๊ตฌ์กฐ
ํ(Heap) ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฃ๊ตฌ์กฐ๋ก, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค. ๋ฐ์ ๋ ฌ ์ํ(๋์จํ ์ ๋ ฌ ์ํ)๋ฅผ ์ ์งํ๋ค. ์ฆ, ๋ชจ๋ ๋
ธ๋๊ฐ ์ ๋ ฌ๋์ด ์๋ ๊ฑด ์๋๋ผ๋ ์๋ฏธ์ด๋ค. ๋ถ๋ชจ ๋
ธ๋์ ์์ ๋
ธ๋ ๊ฐ์ ๋์ ๊ด๊ณ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋ ๊ฐ์ ํฌ๊ธฐ๋ ์๊ด์ด ์๋ค. ํ์ ์ค๋ณต ๊ฐ์ด ํ์ฉ๋๋ค. ํ์ ๋๋์ ์ต๋๊ฐ์ด๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์์ผํ ๋ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ฑฐ๋, ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋๋ค. ์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree) ์ผ์ชฝ์์๋ถํฐ ์ฑ์์ ธ ์๋ ์ด์ง ํธ๋ฆฌ ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ๋ ๋ฒจ์ด ์ฑ์์ ธ ์๋ ํํ ๋ง์ง..
์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree) ์ด์ง ํ์๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํจํ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข
์ผ๋ก, ํ์ ์์
์ ํจ์จ์ ์ผ๋ก ํ ์ ์๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ํน์ง ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋
ธ๋์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์๋ ๋
ธ๋ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ด ํฌํจ๋์ด ์๊ณ , ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์๋ ๋
ธ๋ ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ด ํฌํจ๋์ด ์๋ค. ์๋ธ ํธ๋ฆฌ ๋ํ ์ด์ง ํ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ชจ๋ ์์์ ํค๋ ์ ์ผํ ํค๋ฅผ ๊ฐ์ง๋ค. (์ค๋ณต ๊ฐ์ด ์๋ค.) ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ์ ํ ์๋ฃ๊ตฌ์กฐ์์๋ ํ๋์ ๋ฐ์ดํฐ ๋ค์ ์ค์ง ํ๋์ ๋ฐ์ดํฐ๋ง ์กด์ฌํ๋ค. ๋๋ฌธ์ ํน์ ๊ฐ์ ํ์ํ ๋ ๋งจ ๋๊น์ง ์์ฐจ์ ์ผ๋ก ํ์ํ๋ ์ต์
์ ๊ฒฝ์ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(n)..
ํธ๋ฆฌ (Tree) ๋
ธ๋(Node)์ ๊ฐ์ (Edge)๋ก ์ด๋ฃจ์ด์ง ๋น์ ํ ์๋ฃ๊ตฌ์กฐ ํธ๋ฆฌ์ ์ฉ์ด ๊ตฌ๋ถ ์ค๋ช
๊ฐ์ (Edge) ๋ ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ (๋งํฌ) ๋
ธ๋(Node) ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ณธ ์์ ๋ฃจํธ ๋
ธ๋(Root) ํธ๋ฆฌ์ ์ต ์์ ๋
ธ๋ ๋ฆฌํ ๋
ธ๋(Leaf) ์์ ๋
ธ๋๊ฐ ์๋ ๋
ธ๋ ํ์ ๋
ธ๋(Sibling) ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ๋ ๋
ธ๋ ๋
ธ๋์ ํฌ๊ธฐ(Size) ์์ ์ ํฌํจํ ๋ชจ๋ ์์ ๋
ธ๋์ ๊ฐ์ ๋
ธ๋์ ๊น์ด(depth) ๋ฃจํธ์์ ์ด๋ค ๋
ธ๋์ ๋๋ฌํ๊ธฐ ์ํด ๊ฑฐ์ณ์ผ ํ๋ ๊ฐ์ ์ ์ ๋
ธ๋์ ๋ ๋ฒจ(Level) ํธ๋ฆฌ์ ํน์ ๊น์ด๋ฅผ ๊ฐ์ง๋ ๋
ธ๋์ ์งํฉ ๋
ธ๋์ ์ฐจ์(Degree) ๊ฐ ๋
ธ๋์ ์์ ๋
ธ๋ ๊ฐ์ ํธ๋ฆฌ์ ์ฐจ์(Degree of Tree) ํธ๋ฆฌ์ ์ต๋ ์ฐจ์ ํธ๋ฆฌ์ ๋์ด(Height) ๋ฃจํธ ๋
ธ๋์์ ๊ฐ์ฅ ๊น์์ด ์๋ ๋
ธ..
ํ(Queue) ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๋์ค๋ FIFO์ ํน์ง์ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ Queue๋ ๋ค(rear)์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ (enqueue), ์(front)์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ธ๋ค(dequeue). Front: Queue์ ๊ฐ์ฅ ์ฒซ ์์ Rear: Queue์ ๊ฐ์ฅ ๋ ์์ removeFirst() Swift์์ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํด์ฃผ๋ ์ธ์คํด์ค ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค. ํ์ง๋ง ๋๋จธ์ง ๋ฐฐ์ด์ ์์์ ์๋ฆฌ๋ฅผ ์ด๋์์ผ ๋น ๊ณต๊ฐ์ ์์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด ๋๋ค. ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก Queue ๊ตฌํํ๊ธฐ Node.swift class Node { let data: T var next: Node? init(data: T, next: Node? = nil) { self.data = ..
์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ์ฅ๋์ง ์๋ ์ ํ ์๋ฃ๊ตฌ์กฐ ๋ฐ์ดํฐ ํ๋ + ๋ค์์ ๋
ธ๋์ ๋ํ ์ฐธ์กฐ ๋ฅผ ํฌํจํ๋ ๋
ธ๋๋ก ๊ตฌ์ฑ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ? ๋ฐฐ์ด์ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์์ด ๋ฏธ๋ฆฌ ์์์ ์์ ๋ํด ํ ๋น๋ฐ์์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ์์ ์ฝ์
์ ๋น์ฉ์ด ๋ง์ด ๋ ๋ค. (๊ณต๊ฐ ๋ง๋ค๊ธฐ + ๊ธฐ์กด ์์์ ์ด๋) ์ฅ์ ๋์ ์ธ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ค. ์ฝ์
/์ญ์ ๊ฐ ์ฉ์ดํ๊ณ ์๋๊ฐ ๋น ๋ฅด๋ค. ๋จ์ Random Access๊ฐ ๋ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ ๋
ธ๋๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ก์ธ์คํด์ผํ๋ค. ๊ฒ์ ์๋๊ฐ ๋๋ฆฌ๋ค. ์ ์ฅ ๊ณต๊ฐ์ ํจ์จ์ด ๋์ง ์๋ค. ์ถ๊ฐ(add) ๋
ธ๋๊ฐ ์๋ฌด๊ฒ๋ ์์ ๋ head = nil, tail = nil head ๊ฐ์ ํ์ธ ํ ์๋ก์ด ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๊ณ tail๋ ๋์ผํ๊ฒ ..
์คํ(Stack) ๊ฐ์ฅ ๋์ค์ ๋ค์ด์จ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๋์ค๋ LIFO์ ํน์ง์ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ ์ฝ์
(Push) append() ์๊ฐ๋ณต์ก๋: O(1) ์ญ์ (Pop) removeLast() ๋๋ popLast() removeLast(): ๋ฐฐ์ด์ด ๋น์ด์์ ๋ ์๋ฌ๋ฅผ ๋ฐ์์ํด popLast(): ๋ฐฐ์ด์ด ๋น์ด์์ ๋ nil์ ๋ฐํ์ํด ์๊ฐ๋ณต์ก๋: O(1) ์คํ์ ๋ง์ง๋ง ์์ ์กฐํ(Top) last() ์๊ฐ๋ณต์ก๋: O(1) ๊ตฌํ import Foundation struct Stack { var elements: [T] = [] var count : Int { return elements.count } var isEmpty : Bool { return elements.isEmpty } mutating func pop..