[Swift] ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
ยท
๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ
์ด ๊ธ€์€ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋œ ๊ธ€์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค. ์ด ๊ธ€์˜ ๋ชจ๋“  ์ถœ์ฒ˜๋Š” https://jeonyeohun.tistory.com/327 ์ด๊ณณ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) ํž™์„ ์ด์šฉํ•ด์„œ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ํ•ญ์ƒ ์ œ์ผ ์ฒ˜์Œ์— ์œ„์น˜์‹œํ‚ค๋Š” ํŠน๋ณ„ํ•œ ํ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ๊ฐ€ ํ์—์„œ ์ œ๊ฑฐ๋˜๋ฉด ๊ทธ ๋‹ค์Œ ์šฐ์„ ์ˆœ์œ„์— ์žˆ๋Š” ์š”์†Œ๊ฐ€ ํ์˜ ์ฒซ ์š”์†Œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํž™์— ๋Œ€ํ•œ ์„ค๋ช…์€ https://jerry311.tistory.com/55 ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ• ์ง€ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ • init(_ elements: [T] = [], _ sort: @escaping (T, T) -> Bool) { heap = Heap..
[Swift] ํž™(Heap) ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
ยท
๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ
์ด๊ธ€์€ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋œ ๊ธ€์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค. ์ด๊ธ€์˜ ๋ชจ๋“  ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ถœ์ฒ˜๋Š” https://jeonyeohun.tistory.com/325 ์ด๊ณณ์ž…๋‹ˆ๋‹ค. ํž™ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ˜์ •๋ ฌ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํž™์€ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๋“ค์˜ ์ตœ์†Ÿ๊ฐ’ ํ˜น์€ ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Ÿ๊ฐ’์„ ๋ฃจํŠธ์— ๋‘˜ ๋•Œ๋Š” ์ตœ์†Œํž™, ์ตœ๋Œ€๊ฐ’์„ ๋ฃจํŠธ์— ๋‘๋ฉด ์ตœ๋Œ€ํž™์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. 1. ๊ฐ ๋†’์ด์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์•ผ ๋‹ค์Œ ๋†’์ด์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. ๊ฐ€์žฅ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋…ธ๋“œ๋ฅผ ์ฑ„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฐ์—ด ๊ธฐ๋ฐ˜์˜ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ํž™์„ ๊ตฌํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํž™์˜ ์ด์ง„ํŠธ๋ฆฌ๋Š”..
[Swift] ๊ทธ๋ž˜ํ”„(Graph)
ยท
๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ
์ด ๊ธ€์€ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž„์„ ๋ฐํž™๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://babbab2.tistory.com/105 ์„ ๋ฐฉ๋ฌธํ•ด์ฃผ์„ธ์š”! ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ(์ •์ )๊ณผ ๊ฐ„์„ (๋ธŒ๋žœ์น˜)๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์›์†Œ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์‹ค์ƒํ™œ์˜ ํ˜„์ƒ์ด๋‚˜ ์‚ฌ๋ฌผ์„ ๊ทธ๋ž˜ํ”„๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•  ๊ทธ๋ž˜ํ”„ ๊ด€๋ จ ์šฉ์–ด ๋…ธ๋“œ(์ •์ ) ์ปดํ“จํ„ฐ ๊ณผํ•™์— ์“ฐ์ด๋Š” ๊ธฐ์ดˆ์ ์ธ ๋‹จ์œ„ ์ฆ‰, ์œ„์˜ ๊ทธ๋ฆผ์—์„œ๋Š” ๋™๊ทธ๋ผ๋ฏธ ํ•˜๋‚˜๊ฐ€ ๋…ธ๋“œ๋‹ค. ๊ทธ๋ž˜ํ”„์—์„œ ๋…ธ๋“œ๋Š” ๋Œ€์‘ํ•˜๋Š” ๊ฐœ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ ์ด๋‹ค. ๊ฐ„์„ (๋ธŒ๋žœ์น˜) ๊ฐ์ฒด ์‚ฌ์ด๋ฅผ ์ž‡๋Š” ์—ฐ๊ฒฐ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋…ธ๋“œ ์‚ฌ์ด๋ฅผ ์ž‡๋Š” ๊ฐ ์—ฐ๊ฒฐ์˜ ๊ฐ•๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ธ์ ‘ ์ •์  ๊ฐ„์„ ์— ์˜ํ•ด ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์œ„์˜ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆผ์—์„œ 1์˜ ์ธ์ ‘ ์ •์ ์€ 5์™€ 2, 6์˜ ์ธ์ ‘ ์ •์ ์€ 4 ์ฐธ๊ณ ๋กœ ..
[Swift] ๋ฑ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
ยท
๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ
๋ฑ ์Šคํƒ๊ณผ ํ์˜ ํŠน์„ฑ์„ ๋ชจ๋‘ ๊ฐ–๋Š”, ๋‘˜์„ ์กฐํ•ฉํ•œ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ๋ฑ์˜ ADT(Abstract Data Type)๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜ ๋„ค๊ฐ€์ง€์˜ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. - ์•ž์œผ๋กœ ๋„ฃ๊ธฐ - ๋’ค๋กœ ๋„ฃ๊ธฐ - ์•ž์—์„œ ๋นผ๊ธฐ - ๋’ค์—์„œ ๋นผ๊ธฐ ๋ฑ์€ ๋จธ๋ฆฌ์—์„œ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ์ด๋ค„์ง€๋Š” ๊ฒƒ์€ ๋ฌผ๋ก  ๊ผฌ๋ฆฌ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ์—์„œ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ์ด๋ค„์ง„๋‹ค๋Š” ์ ์—์„œ ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฑ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ์ด๋Š” ๋ฑ ๊ตฌํ˜„์— ์žˆ์–ด์„œ ๋งค์šฐ ์ข‹์€ ์„ ํƒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ๋งŒ ๋ฑ์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. class Deque{ var enQueue: [T] var deQueue: [T] = [] var count: Int { return enQueue.count + deQueue.count } var isEmpty: Bool { ..
[Swift] ์Šคํƒ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ
ยท
๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ
Stack LIFO : ๋งˆ์ง€๋ง‰์œผ๋กœ ๋“ค์–ด์˜จ ๋†ˆ์ด ์ฒซ๋ฒˆ์งธ๋กœ ๋‚˜๊ฐ€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ struct Stack { private var stack: [T] = [] public var count: Int { return stack.count } public var isEmpty: Bool { return stack.isEmpty } public mutating func push(_ element: T) { stack.append(element) } public mutating func pop() -> T? { return isEmpty ? nil : stack.popLast() } } ์‚ฌ์šฉ var myStack = Stack() myStack.push(10) myStack.pop() ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ S..
[Swift] ํ(Queue) ๊ตฌํ˜„ํ•˜๊ธฐ
ยท
๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ
ํ ์„ ์ž…์„ ์ถœ(FIFO) : ๋จผ์ €๋“ค์–ด์˜จ ๋†ˆ์ด ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ Swift ์—์„œ์˜ ๊ตฌํ˜„ struct Queue { private var queue: [T] = [] public var count: Int { return queue.count } public var isEmpty: Bool { return queue.isEmpty } public mutating func enqueue(_ element: T) { queue.append(element) } public mutating func dequeue() -> T? { return isEmpty ? nil : queue.removeFirst() } } ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์€ dequeue์‹œ์— element๋“ค์ด ์ž๋ฆฌ๋ฅผ ๋‹น๊ธฐ๋Š” ๊ณผ์ •์—์„œ O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ..
๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ
ยท
๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ
๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ stack ์˜์—ญ ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. ํ•จ์ˆ˜ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๋ฉฐ, ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ˜ํ™˜๋œ๋‹ค. stack ์‚ฌ์ด์ฆˆ๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ํ• ๋‹น๋˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋  ๋•Œ stack ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด ๋Ÿฐํƒ€์ž„ ์‹œ stack ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค. ๋ช…๋ น ์‹คํ–‰ ์‹œ ์ž๋™์œผ๋กœ ์ฆ๊ฐ€ or ๊ฐ์†Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต ๋ฉ”๋ชจ๋ฆฌ์˜ ๋งˆ์ง€๋ง‰ ๋ฒˆ์ง€๋ฅผ ์ง€์ •ํ•œ๋‹ค. heap ์˜์—ญ ํ•„์š”์— ์˜ํ•ด ๋™์ ์œผ๋กœ ํ• ๋‹นํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค. C์—์„œ malloc(), calloc() ๋“ฑ์˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์— ์˜ํ•ด์„œ๋งŒ ์ฐธ์กฐ๋˜๋Š” ์˜์—ญ์ด๋‹ค. stack์˜์—ญ๊ณผ heap์˜์—ญ์€ ์‚ฌ์‹ค ๊ฐ™์€ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค. heap์ด ๋ฉ”๋ชจ..
JerryiOS
'๐Ÿ’ป CS/์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก