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

โŒจ๏ธ Language/swift251

[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.
[Swift] ์ž๋™ ์ฐธ์กฐ ์นด์šดํŠธ ์ž๋™ ์ฐธ์กฐ ์นด์šดํŠธ(ARC, Automatic Reference Counting)์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋™์œผ๋กœ ์ฐธ์กฐ ํšŸ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†๊ณ  ARC๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ง€ํŠน์ • ๊ฒฝ์šฐ์— ARC์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ์˜ ํŠน์ • ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ•„์š”๋กœ ํ•จ์ฐธ์กฐ ํšŸ์ˆ˜๋Š” ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์—๋งŒ ์ ์šฉ๋˜๊ณ  ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜• ๋“ฑ ๊ฐ’ ํƒ€์ž…์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Œ ARC ๋™์ž‘์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ๋งˆ๋‹ค ARC๋Š” ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ๋‹ด๋Š”๋ฐ ํ•„์š”ํ•œ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฉ”๋ชจ๋ฆฌ๋Š” ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๊ด€๋ จ๋œ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์Œ์ธ์Šคํ„ด์Šค๊ฐ€ ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ ARC๋Š” ๊ทธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ง€ํ•ด ๊ณต๊ฐ„์„ ํ™•๋ณดAR.. 2024. 4. 2.
๋ฐ˜์‘ํ˜•