suvera-dev ๐Ÿฅฆ

20230331 TIL ๋ณธ๋ฌธ

Private/TIL

20230331 TIL

suvera 2023. 4. 1. 03:26

TIL์ด ์ž‘์‹ฌ์‚ผ์ผ์„ ๋„˜๊ฒจ์„œ ์ฐธ ๋‹คํ–‰์ด์—์š”.. ใ…‹ใ…‹

์˜ค๋Š˜ ์ €๋…์— ์Šค์ฆˆ๋ฉ”์˜ ๋ฌธ๋‹จ์†์„ ๋ณด๊ณ ์™€์„œ

๋Šฆ๊ฒŒ ์—…๋กœ๋“œํ•˜๋„ค์š”.. ใ…Ž

 

์ฐธ๊ณ ๋กœ ์˜ํ™”๊ด€์—์„œ ๋ณด๋Š”๊ฑฐ ๊ฐ•์ถ”.. ์‚ฌ์šด๋“œ.. ์—ฐ์ถœ.. ๋ง์•ˆ๋ผ ~~~

๋ฏฟ๊ณ ๋ณด๋Š” ์‹ ์นด์ด ๋งˆ์ฝ”ํ† ..

์ง€๊ธˆ๋„ OST ๋“ค์œผ๋ฉด์„œ ์“ฐ๊ณ  ์žˆ์–ด์š” ^^.

 

 

1. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด - ํŠธ๋ฆฌ 

์ฐธ ์–ด์ด์—†๋Š” ์‚ฌ๊ฑด ๋ฐœ์ƒ.. ๋ฐฑ์ค€์— ํŠธ๋ฆฌ ๋ฌธ์ œ๊ฐ€ 2๊ฐœ์˜€๋Š”๋ฐ 

์ •ํ•ด์ง„ ๋ฌธ์ œ ๋ง๊ณ  ๋‹ค๋ฅธ ๋ฒˆํ˜ธ ํ’€์–ด๋†“๊ณ  

์™œ ํ’€์ด๊ฐ€ ๋‹ค๋ฅผ๊นŒ.. ํ•œ์ฐธ ์ƒ๊ฐํ–ˆ์Œ.. 

์–ด์ฉ์ง€ ์ด์ƒํ•˜๋”๋ผ..

 

1068๋ฒˆ: ํŠธ๋ฆฌ

์ฒซ์งธ ์ค„์— ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ๊ฐ€ ์—†๋‹ค๋ฉด (๋ฃจํŠธ) -1์ด ์ฃผ์–ด์ง„๋‹ค

www.acmicpc.net

 

ํ’€์ด๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ•ด์กŒ์ง€๋งŒ, ํ†ต๊ณผ๋Š” ํ–ˆ์Šต๋‹ˆ๋‹ค. ใ…‹ใ…‹... 

 

1. ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒํ˜•์— ์ €์žฅํ•ด์ค๋‹ˆ๋‹ค.

var treeDic: [Int:[Int]] = [:]

for (index,element) in tree.enumerated() {
	treeDic[element, default: []] += [index]
}

2. ์ฒ˜์Œ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์€ ๋ถ€๋ชจ๋…ธ๋“œ ์ •๋ณด๋งŒ ๊ฐ–๊ณ  ์žˆ์–ด์„œ, ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๋”ฐ๋กœ ์ €์žฅ์„ ํ•ด์คฌ์–ด์š”. 

// ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ ์ถ”๊ฐ€

    for i in 0..<tree.count {
        if !Set(treeDic.keys).contains(i) {
            // tree์˜ key์— ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ
            treeDic[i] = []
        }
    }

3. ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์คฌ์Šต๋‹ˆ๋‹ค.

    func removeChlidNode(array: [Int]) {
        for i in array {
            removeChlidNode(array: treeDic[i]!)
            treeDic[i] = nil
        }
    }

4. ๊ทธ๋ฆฌ๊ณ  ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ๊ทธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋ถ€๋ถ„์„ ๋Š์–ด์ฃผ๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

// ๋…ธ๋“œ ์ œ๊ฑฐ ์ƒํ™ฉ

    var leafNode: Int = 0

    for (k,v) in treeDic {
        if k == deleteNode {
            // ๊ทธ key์— ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด์— ์žˆ๋Š” ์• ๋“ค ๋‹ค ์ง€์›Œ์ค˜ 
            removeChlidNode(array: treeDic[k]!)
            treeDic[k] = nil
        } else if v.contains(deleteNode) {
            let index = v.firstIndex(where: {$0 == deleteNode})!
            treeDic[k]?.remove(at: index)
        }
    }

ํ•ด๋‹น key์— ๋“ค์–ด์žˆ๋Š” ์ž์‹๋…ธ๋“œ๋“ค์„ ๋‹ค ์ง€์›Œ์ฃผ๊ณ  ๊ทธ ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ์ž์‹๋“ค๊นŒ์ง€ ๋‹ค ์ง€์›Œ์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๊ท€๋กœ ๋Œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‚ญ์ œ ํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋…ธ๋“œ์— ์ ‘๊ทผํ•ด์„œ ๊ทธ ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•ด์ค๋‹ˆ๋‹ค. 

์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„์„œ remove ํ•ด์คฌ๋Š”๋ฐ, ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

5. ๋งˆ์ง€๋ง‰์œผ๋กœ, ๋‹ต์„ ๊ตฌํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. 

    for i in treeDic {
        if i.key == -1 && i.value.isEmpty {
            leafNode = 0
            break
        }

        if i.value.isEmpty {
            leafNode += 1
        }
    }

    print(leafNode)

- key ๊ฐ€ -1 ์ผ ๊ฒฝ์šฐ, ๋ฃจํŠธ ๋…ธ๋“œ์ด๊ณ  ๋ฃจํŠธ ๋…ธ๋“œ์— ๋‚จ์€ ์ž์‹์ด ์—†๋‹ค๋ฉด, ๋ฆฌํ”„๋…ธ๋“œ๋Š” 0์ด ๋ฉ๋‹ˆ๋‹ค.

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

 

์ œ๊ฐ€ ํ‘ผ ํ’€์ด๋ž‘ ์•„์˜ˆ ๋‹ค๋ฅธ ํ’€์ด๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์ค€์— ์ œ์ถœํ•ด์„œ ๋น„๊ตํ•ด๋ณด๋‹ˆ ์ œ ์ฝ”๋“œ๊ฐ€ 2๋ฐฐ ์ •๋„ ๋น ๋ฅด๋”๊ตฐ์š” ใ…‹ใ…‹ ๊ทธ๋ž˜๋„ ์ฝ”๋“œ๋Š” ๋” ๊น”๋”ํ–ˆ์–ด์š”.

2์ฐจ์› ๋ฐฐ์—ด๋ง๊ณ  ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์‹ถ์Šต๋‹ˆ๋‹ค.

 

์ž๊ธฐ ์ „์— ํŠธ๋ฆฌ ์ˆœํšŒ ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜๋งŒ ๋” ํ’€๊ณ  ์ž๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ.. ๋ฒŒ์จ 3์‹œ๋„ค์š” ใ…œ

 

 

2. SwiftUI ํŠœํ† ๋ฆฌ์–ผ ์ฑ•ํ„ฐ 3

 

SwiftUI) SwiftUI Essentials 3 - Handling User Input

Handling User Input | Apple Developer Documentation In the Landmarks app, a user can flag their favorite places, and filter the list to show just their favorites. To create this feature, you’ll start by adding a switch to the list so users can focus on j

suvera.tistory.com

ํ•˜๋ฃจ์— ํ•˜๋‚˜ ์ •๋„ ๊ฐ€๋ณ๊ฒŒ ํ•˜๋‹ˆ๊นŒ ์žฌ๋ฐŒ์–ด์š”. ์ฐธ๊ณ ๋กœ ๋ฒˆ์—ญ์€ GPT๊ฐ€ ๊ธฐ๊น”๋‚˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

ํฌ๋กฌ์—์„œ ๊ทธ๋ƒฅ ๋ฒˆ์—ญ ๋ˆ„๋ฅด๋ฉด ์˜์–ด ํ‚ค์›Œ๋“œ๊นŒ์ง€ ์ „๋ถ€ ์ด์ƒํ•˜๊ฒŒ ๋ฒˆ์—ญ๋˜๋Š”๊ฑฐ ์•Œ์ฃ ..

๊ทผ๋ฐ GPT๋Š” ์•Œ์•„์„œ ๋‹ค ๊ฐœ๋ฐœ์šฉ์–ด๋Š” ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์„ค๋ช…ํ•˜๋“ฏ์ด ๋ฒˆ์—ญํ•ด์ค˜์š”.

 

GPT๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ•์˜ ? ์ฑ… ? ๋“ค์ด ์š”์ฆ˜ ์ฐธ ๋งŽ์€ ๊ฒƒ ๊ฐ™์•„์š”.

์ €๋„ ์ž˜ ์“ฐ๊ณ  ์žˆ์ง€๋งŒ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ํ™œ์šฉํ•ด๋ณด๊ณ  ์‹ถ์–ด์ง€๋„ค์š”.

 

๊ทผ๋ฐ GPT๋กœ ์ธํ•œ ์—ฌ๋Ÿฌ ์ด์Šˆ๋“ค๋„ ์žˆ๋”๋ผ๊ตฌ์š”.

์ตœ๊ทผ์— ์‚ผ์„ฑ์—์„œ ํ•œ ์ง์›์ด GPT์— ํšŒ์‚ฌ ๋‚ด๋ถ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ด์„œ

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๋ฌผ์–ด๋ณด๋Š” ๋“ฑ์˜ ๊ธฐ์—… ์ •๋ณด ์œ ์ถœ ์‚ฌ๊ณ ๊ฐ€ ์žˆ์—ˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

 

์‚ผ์„ฑ์ „์ž ์„ค๋น„ ๊ณ„์ธก๊ณผ ๊ด€๋ จํ•œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์˜คํ”ˆAI ํ•™์Šต ๋ฐ์ดํ„ฐ๋กœ ์ž…๋ ฅ๋œ ์…ˆ์ด๋ผ

๊ธฐ์—…์ธก์—์„œ๋Š” ๋‹ค์‹œ GPT ์‚ฌ์šฉ์„ ์ œํ•œํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋ถˆํŠน์ • ๋‹ค์ˆ˜์—๊ฒŒ ๋…ธ์ถœ ๋  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์กฐ์‹ฌํ•ด์•ผ๊ฒ ๋„ค์š”.

 

3. ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋… - ์ ‘๊ทผ์ œ์–ด ์ •๋ฆฌ

 

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ Swift - ์ ‘๊ทผ์ œ์–ด

์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค, ํ”„๋กœํผํ‹ฐ, ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์งš์–ด๋ดค๋Š”๋ฐ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ ‘๊ทผ์ œ์–ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ ์ค‘์š”ํ•œ ๋‚ด์šฉ ์ค‘์— '์€๋‹‰ํ™”'

suvera.tistory.com

์˜ค๋žœ๋งŒ์— ์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ๋ณต์Šตํ–ˆ์–ด์š” ! 

 

๋ชจ๋“ˆํ™” ํ•˜๋ฉด์„œ ์ ‘๊ทผ์ œ์–ด์˜ ์ค‘์š”์„ฑ์„ ๋Š๊ผˆ์—ˆ๋Š”๋ฐ,

์ตœ๊ทผ์— ๊ฐœ๋ฐœ ์„ธ์…˜์—์„œ private ํ‚ค์›Œ๋“œ๋กœ๋„

๋นŒ๋“œ์‹œ๊ฐ„ ๊ฐ์†Œ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋ดค์—ˆ๊ฑฐ๋“ ์š”.

 

์ด์™€ ๊ด€๋ จํ•ด์„œ Static Dispatch์™€ Dynamic Dispatch ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์‚ด์ง ์ฝ์–ด๋งŒ ๋ดค์Šต๋‹ˆ๋‹ค. ใ…‹ใ…‹

 

private ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž ์žฌ๋œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ˜„์žฌ ํŒŒ์ผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์š”.

ํ˜„์žฌ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ๋งŒ final ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๋ก ํ•˜๊ณ , ๋ฉ”์†Œ๋“œ์™€ ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ์— ๋Œ€ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ •๋ฆฌํ•˜์ž๋ฉด, private์„ ๊ฐ€์ง„ ํ•ด๋‹น ์š”์†Œ๋Š” ํ•œ ๋ธ”๋Ÿญ ๋‚ด์—์„œ๋งŒ ์ฐธ์กฐ๋˜๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋˜๊ณ 

ํ•œ ๋ธ”๋Ÿญ๋‚ด์— ์˜ค๋ฒ„๋ผ์ด๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๊ฒƒ์„ Static Dispatch๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

 

๋‹ค์Œ์— Static Dispatch, Dynamic Dispatch์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ํฌ์ŠคํŒ… ํ•ด๋ณผ๊ฒŒ์š”..

 

 

 


 

์š”์ฆ˜ ํ•˜๊ณ ์‹ถ์€ ? ํ•ด์•ผํ•˜๋Š” ? ๊ฒƒ๋“ค์ด ๋„ˆ๋ฌด ๋งŽ๋„ค์š”..

 

๊ทผ๋ฐ ์ž์†Œ์„œ๋„ ์จ์•ผํ•˜๊ณ .. ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ํ’€์–ด์•ผํ•˜๊ณ .. 

๊ทผ๋ฐ ๋†€๊ธฐ๋„ ํ•ด์•ผํ•˜๊ณ .. ์šด๋™๋„ ํ•ด์•ผํ•˜๊ณ .. ์•Œ๋ฐ”๋„ ํ•ด์•ผํ•˜๊ณ .. 

๋‚ ์”จ๋„ ์ข‹์•„์ ธ์„œ ๊ดœํžˆ ๊ฝƒ๊ตฌ๊ฒฝ ๊ฐ€๊ณ ์‹ถ๊ณ .. ์—ฌํ–‰๋„ ๊ฐ€๊ณ ์‹ถ๊ณ ..

 

์ง„์งœ ํ•˜๋ฃจ๊ฐ€ 48์‹œ๊ฐ„์ด๋ฉด ์ข‹๊ฒŒ์จ์š”..ใ…œใ…œใ…œใ…œ 

์ผ๋‹จ ์กฐ๊ธ‰ํ•ดํ•˜์ง€ ์•Š๊ณ .. ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ž˜ ์ •ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค !

 

๋ฒŒ์จ 4์›”์ด๋ผ๋‹ˆ.. 23๋…„์˜ 1๋ถ„๊ธฐ๊ฐ€ ๋๋‚ฌ๋‹ค๋Š”๊ฒŒ ๋„ˆ๋ฌด ์•ˆ๋ฏฟ๊ธฐ๋„ค์š”.

์‹œ๊ฐ„์ด ์™ค์ผ€ ๋น ๋ฅธ๊ฑธ๊นŒ์š” ????????????? ใ…‡.ใ…‡

 

๋‹ค๋“ค 4์›”๋„ ํ™”์ดํŒ…์ž…๋‹ˆ๋‹ค..

'Private > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

20230402 TIL  (0) 2023.04.02
20230401 TIL  (0) 2023.04.02
20230330 TIL  (2) 2023.03.31
20230329 TIL  (2) 2023.03.30
20230328 TIL  (6) 2023.03.29
Comments