[DataStructure] ํ 1๋ถ€

2024. 5. 1. 17:31ยทlearnings/Algorithm&DS

0. ์„œ๋ก 

๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฐ€๋“ฏ์ด ์Œ“์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์†๋„๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋ฉด, ๊ทธ๋™์•ˆ ์Œ“์ด๋Š” ๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์ข‹์„๊นŒ์š”?
์Œ์‹์  ์•ˆ์— ์‚ฌ๋žŒ์ด ๋งŽ์•„ ์ž๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด, ์‚ฌ๋žŒ๋“ค์€ ์ค„์„ ์„œ์ฃ . ์ž๋ฆฌ๊ฐ€ ์ƒ๊ธฐ๋ฉด, ๋จผ์ € ์˜จ ์‚ฌ๋žŒ์ด ๋จผ์ € ์ž๋ฆฌ์— ์•‰๋“ฏ์ด
๋ฐ์ดํ„ฐ๋„ ์ค„์„ธ์›Œ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•  ์ˆ˜ ์—†์„๊นŒ์š”? 

๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์„ ์ž… ์„ ์ถœ์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ, ์ด๋ฒˆ ๊ธ€์€ ํ์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๊ตฌ์กฐ

๋‚ด๊ฐ€ ๋จผ์ €์•ผ!
์„ ์ž… ์„ ์ถœ, ์–ด๋ฆฐ ์•„์ด๋“ค๋„ ์•Œ๊ณ ์žˆ๋Š” ์„ธ์ƒ์˜ ์ด์น˜์ž…๋‹ˆ๋‹ค. ๋จผ์ € ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•œ ๋…€์„์ด ์šฐ์„ ๊ถŒ์„ ๊ฐ–๋Š”๋‹ค!
ํ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์„ธ์›Œ ์ฒ˜๋ฆฌ๋ฅผ ๋Œ€๊ธฐ์‹œํ‚ต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด, ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ๋Š” ์ž์•„๊ฐ€ ์—†์œผ๋‹ˆ ์„œ๋กœ๊ฐ€ ๋จผ์ €๋ผ๊ณ  ์šฐ๊ธธ ์ผ์€ ์—†๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ, ์˜คํžˆ๋ ค ์„œ๋กœ๊ฐ€ ์•„๋ฌด๋ง๋„ ์—†์–ด ๊ณจ์น˜์ธ ๋…€์„๋“ค์ธ ๋ฐ์ดํ„ฐ๋Š”
์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์ด ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Swift์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ž…์„ ์ถœ์˜ ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์ฃ .
๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž์ด๋ฏ€๋กœ, ์„ ์ž…์„ ์ถœ์— ์žˆ์–ด ๊ฐœ๋ฐœ์ž๋ผ๋ฆฌ์˜ ์•ฝ์†์ธ ํ(queue)๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ์ด๋กญ์Šต๋‹ˆ๋‹ค.
์†Œ์Šค์ฝ”๋“œ์— ํ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณด๋Š”๊ฒƒ๋งŒ์œผ๋กœ๋„, ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ž…์„ ์ถœ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค๋Š” ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ง์ด์ฃ !
์•ฝ์†์ด๋ž€ ์ฐธ ํŽธ๋ฆฌํ•œ ๋ฌผ๊ฑด์ž…๋‹ˆ๋‹ค.

2. ๊ตฌํ˜„

ํ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋˜ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ, ๋จผ์ € ์Šคํƒ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์Šคํƒ 2๊ฐœ๋กœ ์–ด๋–ป๊ฒŒ ํ๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒ ๋‹ค๋Š”๊ฑด์ง€ ๊ถ๊ธˆํ•˜์ง€ ์•Š์œผ์‹ ๊ฐ€์š”? ์ ์–ด๋„ ์ €๋Š” ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • enqueue์‹œ ์ž…๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ appendํ•œ๋‹ค.
    ์ด๋กœ ์ธํ•ด ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งจ ์•ž, ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งจ ๋’ค์— ์œ„์น˜ํ•œ๋‹ค.
  • ์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ์Šคํƒ์—, ์ž…๋ ฅ์šฉ ์Šคํƒ์„ ๋’ค์ง‘์–ด ๋ณต์‚ฌํ•œ๋‹ค.
    ์ด๋กœ ์ธํ•ด ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งจ ๋’ค, ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งจ ์•ž์— ์œ„์น˜ํ•œ๋‹ค.
  • popLast ๋”ฐ์œ„๋ฅผ ํ™œ์šฉํ•˜์—ฌ dequeueํ•  ๋•Œ, ์ƒ๊ธฐ ๊ณผ์ •์— ์˜ํ•ด ํ•ด๋‹น ์š”์†Œ๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ์ด๋‹ค.

์œ„์˜ ๊ณผ์ •๋Œ€๋กœ๋ผ๋ฉด append์™€ popLast ๋ชจ๋‘ O(1)์ด๋ฏ€๋กœ ์ƒ์ˆ˜์‹œ๊ฐ„ ๋‚ด์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ, ์Šคํƒ์„ ๋’ค์ง‘์–ด ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์„ ์ œ์™ธํ•œ๋‹ค๋ฉด ๋ง์ด์ง€์š”.
Swift๋Š” Array ๋‚ด์˜ ์š”์†Œ๋ฅผ ๋’ค์ง‘์€ Array๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ reversed()๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค๋งŒ
ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ ์ •์˜๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ณต์ˆ˜๊ฐœ์ด๋ฉฐ, ๋”ฐ๋ผ์„œ ๋ฐ˜ํ™ฉํ˜•์— ๋”ฐ๋ผ O(1) ๋˜๋Š” O(n)์ธ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
(์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ์— ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ O(1)์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค๋Š” ์„ค๋ช…์ด ๋งŽ์€๋ฐ, ์•„๋ฌด๋ฆฌ quick view๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜๊ธฐ์— ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค)

  • ๋ฐ˜ํ™˜ํ˜•์ด Array์ผ ๊ฒฝ์šฐ
    ์ด๋Š” Sequence ์— ๊ตฌํ˜„๋ผ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋กœ, ๋ณต์‚ฌํ•œ Array์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ Swapํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    n๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์ค‘ n/2๊ฐœ์— ์ ‘๊ทผํ•˜๋ฏ€๋กœ O(n)์˜ Cost๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์ฝ”๋“œ ๋งํฌ
  • ๋ฐ˜ํ™˜ํ˜•์ด ReversedCollection์ผ ๊ฒฝ์šฐ
    ์ด๋Š” BidirectionalCollection์— ๊ตฌํ˜„๋ผ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋กœ, array๋ฅผ ๊ฑฐ๊พธ๋กœ ์ ‘๊ทผํ•˜๋„๋ก ๋ž˜ํ•‘ํ•œ ์ž๋ฃŒํ˜•์ธ
    ReversedCollection๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์ฝ”๋“œ ๋งํฌ

RerversedCollection์€ RangeReplaceableCollection Protocol์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, popLast๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ Sequence์—์„œ ์ œ๊ณตํ•˜๋Š” reversed()๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๊ณ , ์ด๋Š” O(n)์˜ Cost๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ์— deque์‹œ์— outbox๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ O(n), ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด O(1)์˜ Cost๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, dequeue์‹œ์— outbox์— ์žˆ๋Š” ์š”์†Œ๊ฐ€ ์ ์„์ˆ˜๋ก, ์ž์ฃผ dequeueํ•  ์ˆ˜๋ก dequeue๋Š” ๋” ์ž์ฃผ O(n)์˜ Cost๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒ ๊ตฐ์š”.

์ด๋ฅผ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด front์˜ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค๋งŒ..!
๊ณ„์† ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

struct Queue<T>{
    fileprivate var inbox: [T] = []
    fileprivate var outbox: [T] = []
    init(inbox: [T] = [], outbox: [T] = []) {
        self.inbox = inbox
        self.outbox = outbox
    }
}

 

์•„์ด๋””์–ด๋Œ€๋กœ ํ์— ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” inbox, ๋‚˜๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” outbox๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” Array๋กœ ํ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ตฐ์š”

    mutating func enqueue(element: T){
        inbox.append(element)
    }
    mutating func dequeue()->T?{
        if outbox.isEmpty{
            //outbox.isEmpty == true ์ผ๋•Œ๋งŒ O(n)์ธ reverse()๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์— ์ „์ฒด์ ์œผ๋กœ๋Š” O(1)์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
            outbox = inbox.reversed()
            //Array.removeAll()์€ keepingCapacity๊ฐ€ false์ผ ๋•Œ, O(1)์˜ Performance๋ฅผ ๊ฐ–๋Š”๋‹ค.
            //https://stackoverflow.com/questions/54133045/performance-array-removeall-vs
            inbox.removeAll()
        }
        return outbox.popLast()
    }

๊ธฐ๋ณธ์ ์ธ ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์ธ enqueue์™€ dequeue์ž…๋‹ˆ๋‹ค.
dequeue์‹œ reversed ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋•Œ inbox๋ฅผ removeAll ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
(removeAll()์„ ํ˜ธ์ถœํ•˜๋Š”๊ฒƒ๊ณผ []๋ฅผ ๋Œ€์ž…ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜์ง€ ์•Š์œผ์‹ ๊ฐ€์š”? ๊ทธ๊ฒƒ์€ ๋”ฐ๋กœ ํฌ์ŠคํŒ…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

    var isEmpty: Bool{
        return outbox.isEmpty && inbox.isEmpty
    }
    var front: T?{
        return outbox.isEmpty ? inbox.first : outbox.last
    }
    var rear: T?{
        if outbox.isEmpty { return inbox.last }
        return outbox.first
    }
    var count: Int{
        return outbox.count + inbox.count
    }

ํ์˜ ์ƒํƒœ์™€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€ํ•œ ์š”์†Œ rear, ๊ฐ€์žฅ ์ฒ˜์Œ์— ์ถ”๊ฐ€ํ•œ ์š”์†Œ front ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์ „์ฒด ์†Œ์Šค์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

struct Queue<T>{
    fileprivate var inbox: [T] = []
    fileprivate var outbox: [T] = []
    init(inbox: [T] = [], outbox: [T] = []) {
        self.inbox = inbox
        self.outbox = outbox
    }
    var isEmpty: Bool{
        return outbox.isEmpty && inbox.isEmpty
    }
    var front: T?{
        return outbox.isEmpty ? inbox.first : outbox.last
    }
    var rear: T?{
        if outbox.isEmpty { return inbox.last }
        return outbox.first
    }
    var count: Int{
        return outbox.count + inbox.count
    }
    mutating func enqueue(element: T){
        inbox.append(element)
    }
    mutating func dequeue()->T?{
        if outbox.isEmpty{
            //outbox.isEmpty == true ์ผ๋•Œ๋งŒ O(n)์ธ reverse()๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์— ์ „์ฒด์ ์œผ๋กœ๋Š” O(1)์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
            outbox = inbox.reversed()
            //Array.removeAll()์€ keepingCapacity๊ฐ€ false์ผ ๋•Œ, O(1)์˜ Performance๋ฅผ ๊ฐ–๋Š”๋‹ค.
            //https://stackoverflow.com/questions/54133045/performance-array-removeall-vs
            inbox.removeAll()
        }
        return outbox.popLast()
    }
}

๋งˆ๋ฌด๋ฆฌ

์ด๋กœ์จ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ตฌํ˜„์€ ๋์ž…๋‹ˆ๋‹ค.
์™œ Swift๋Š” ํ๋ฅผ ๋‚ด์žฅํ•˜์ง€ ์•Š์•„์„œ.... ํ๋ฅผ ์“ธ ๋•Œ ๋งˆ๋‹ค ์ด ๊ณ ์ƒ์„....

ํ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘, ์Šคํƒ์„ 1๊ฐœ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋˜ํ•œ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ!

2๋ถ€์—์„œ ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค.

'learnings > Algorithm&DS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[DataStructure] ์Šคํƒ  (1) 2024.05.01
[Algorithm] ์ฐจ๋Ÿ‰๊ธฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์„ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜  (0) 2024.04.05
[DataStructure] ํ™˜ํ˜• ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ  (0) 2024.03.26
[DataStructure] ์ด์ค‘ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ  (0) 2024.03.25
[DataStructure] ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ  (0) 2024.03.20
'learnings/Algorithm&DS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [DataStructure] ์Šคํƒ
  • [Algorithm] ์ฐจ๋Ÿ‰๊ธฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์„ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜
  • [DataStructure] ํ™˜ํ˜• ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ
  • [DataStructure] ์ด์ค‘ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ Swift๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ
Une.
Une.
์ด์ง„์„ธ์ƒ์† ์ž์œ ๋ฅผ ์ฐพ๋Š” ์‚ฌ๋žŒ์ด ๋‚จ๊ธด ๊ธฐ๋ก
  • Une.
    Une's Dev-log๐Ÿ
    Une.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • \ (35)
      • log (4)
      • mac (2)
      • learnings (28)
        • ํšŒ๊ณ  (0)
        • Swift (10)
        • PS (10)
        • Algorithm&DS (6)
        • c++ (2)
      • CS (1)
        • ๋„คํŠธ์›Œํฌ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋ฐฉ๋ช…๋ก
    • ๊ด€๋ฆฌ์ž
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ฐจ๋Ÿ‰๊ธฐ์ง€์•Œ๊ณ ๋ฆฌ์ฆ˜
    ios
    ๋ฐฑ์ค€
    ํ† ์ดํ”„๋กœ์ ํŠธ
    swift
    ๊ฐ•ํ•œ์ฐธ์กฐ
    C++
    wwdc25
    ๋”๋ธ”๋ฆฌ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ
    ์Šคํƒ
    ํ™˜ํ˜•๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ
    DFS
    swift 6.2
    ์ฝ”๋“œ์—…
    ๊ทธ๋ฆฌ๋””
    BFS
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ž๋ฃŒ๊ตฌ์กฐ
    ๋งฅ
    PS
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Une.
[DataStructure] ํ 1๋ถ€
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”