๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ž๋ฃŒ๊ตฌ์กฐ14

[Swift] ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) ๊ตฌํ˜„ํ•˜๊ธฐ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์š”์†Œ๊ฐ€ ์‚ฝ์ž…๋  ๋•Œ๋งˆ๋‹ค ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ •๋ ฌ๋˜๋ฉฐ, ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ์š”์†Œ๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด์ „์— ๊ตฌํ˜„ํ•œ Heap์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” PriorityQueue ๊ตฌ์กฐ์ฒด๋ฅผ ์ œ๋„ค๋ฆญ์œผ๋กœ ์ •์˜ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.struct PriorityQueue { private var heap: Heap var isEmpty: Bool { return heap.isEmpty } var count: Int { return heap.count } var peek: T? { return heap.peek } init(sort: @escaping (T, T) -> Bool) { he.. 2024. 9. 27.
[Swift] ํž™(Heap) ๊ตฌํ˜„ํ•˜๊ธฐ Heap์€ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ํŠน์ • ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์š”์†Œ๋“ค์„ ์ •๋ ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Heap์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œ ํž™์€ ์ž‘์€ ๊ฐ’์ด ๋จผ์ € ๋‚˜์˜ค๋„๋ก ์ •๋ ฌํ•˜๊ณ , ์ตœ๋Œ€ ํž™์€ ํฐ ๊ฐ’์ด ๋จผ์ € ๋‚˜์˜ค๋„๋ก ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ์„ ์ด์šฉํ•ด Heap ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.struct Heap { private var elements: [T] = [] private let priorityFunction: (T, T) -> Bool var isEmpty: Bool { return elements.isEmpty } var count: Int { return elements.count } var p.. 2024. 9. 27.
[Swift] Dequeue ๊ตฌํ˜„ํ•˜๊ธฐ Dequeue๋Š” ์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์ด๋ฅผ ํ†ตํ•ด ํ์™€ ์Šคํƒ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dequeue๋ฅผ ๊ตฌ์กฐ์ฒด์™€ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•˜์—ฌ Dequeue ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. struct Deque { private var enqueue: [T] = [] // ๋’ค์ชฝ์—์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•˜๋Š” ๋ฐฐ์—ด private var dequeue: [T] = [] // ์•ž์ชฝ์—์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐํ•˜๋Š” ๋ฐฐ์—ด var count: Int { return enqueue.count + dequeue.count } var isEmpty: Bool { return enque.. 2024. 9. 27.
[Swfit] ํ(Queue) ๊ตฌํ˜„ํ•˜๊ธฐ Queue๋ฅผ ๊ตฌ์กฐ์ฒด์™€ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋จผ์ € ์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•ด Queue ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. struct Queue { private var queue: [T] = [] var isEmpty: Bool { return queue.isEmpty } var count: Int { return queue.count } var peek: T? { return queue.first } mutating func enqueue(_ element: T) { queue.append(element) } mutating func dequeue() .. 2024. 9. 27.
[Swift] ์Šคํƒ(Stack) ๊ตฌํ˜„ํ•˜๊ธฐ Stack์„ ๊ตฌ์กฐ์ฒด์™€ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋จผ์ € ์ œ๋„ค๋ฆญ์„ ์ด์šฉํ•ด Stack ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. struct Stack { private var stack: [T] = [] var isEmpty: Bool { return stack.isEmpty } var count: Int { return stack.count } var peek: T? { return stack.last } mutating func push(_ element: T) { stack.append(element) } mutating func pop() -> T? { .. 2024. 9. 27.
[์ž๋ฃŒ๊ตฌ์กฐ] ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table) ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table) ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ (Key, Value)์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํ•ด์‹œํ•จ์ˆ˜(Hash Function)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ index๋กœ ์‚ผ์Œ ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)๋ฅผ ์‚ฌ์šฉํ•ด Key ๊ฐ’์„ ์ƒ‰์ธ(index)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ํ•ด์‹ฑ(Hashing)์ด๋ผ๊ณ  ํ•จ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ํŒŒ์ด์ฌ์˜ dictionary, ๋ฃจ๋น„์˜ Hash, ์ž๋ฐ”์˜ Map ๋“ฑ์ด ์žˆ์Œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํŠน์ง• ๊ธฐ๋ณธ ์—ฐ์‚ฐ์œผ๋กœ๋Š” search, insert, delete๊ฐ€ ์žˆ์Œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ key๋ฅผ ํ†ตํ•ด์„œ value๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ => ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋‚˜ ๋ฐฐ์—ด์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋น ๋ฆ„ ์ปค๋‹ค๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œํ•ด์„œ ์งง์€ ๊ธธ์ด๋กœ ์ถ•์•ฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ ํšจ์œจ์  value๋Š” ์ค‘๋ณต ๊ฐ€๋Šฅํ•˜.. 2023. 3. 15.
๋ฐ˜์‘ํ˜•