MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‹คํŒจ์œจ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/programmers

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‹คํŒจ์œจ

MUKER 2023. 1. 12. 22:29
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


๋ฌธ์ œํ’€์ด๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํ’€์ด์™€
๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด๋กœ ๋‚˜๋ˆ„์–ด ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋ฌธ์ œ์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ํ’€์ด๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹คํŒจ ํ’€์ด 1

import Foundation

func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    var failureLate = [Int: Double]()

    for i in 1...N {
        let yet = stages.filter { $0 == i }.count
        let clear = stages.filter { $0 >= i }.count
        failureLate[i] = Double(yet) / Double(clear)
    }

    return failureLate.sorted(by: <).sorted(by: { $0.value > $1.value }).map { $0.key }
}

 

ํ›„... ๋‚˜์˜ ์ฒซ๋ฒˆ์งธ ์‹คํŒจ ํ’€์ด๋‹ค

 

5,9,22๋ฒˆ์ด์—ˆ๋‚˜ ์ž๊พธ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ ๋ณ„์˜ ๋ณ„์ง“์„ ๋‹ค ํ•ด๋ดค๋‹ค

Double์„ Float์œผ๋กœ ์ค„์—ฌ๋ณด๊ณ  Float16 ์œผ๋กœ ์ค„์—ฌ๋ณด๊ณ ..

 

ํ•˜์ฅ๋งŒ ์–ด๋ฆผ์—†๋Š” ๋˜ฅ๋ณผ^^

 

๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” for๋ฌธ ์•ˆ์— ์žˆ๋Š” filter๋“ค์ด ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜์˜จ ์‹คํŒจ ํ’€์ด2

 

์‹คํŒจ ํ’€์ด 2

import Foundation

func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    var failureLate = [Int: Float32]()
    var count = stages.count
    for i in 1...N {
        let yet = stages.filter { $0 == i }.count
        failureLate[i] = Float32(yet) / Float32(count)
        count -= yet
    }
    return failureLate.sorted(by: <).sorted(by: { $0.value > $1.value }).map { $0.key }
}

 

filter๋ฅผ ํ•˜๋‚˜ ์ค„์˜€๋‹ค!!!

 

๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ

๊ทธ๋ƒฅ.. ์•ˆํ’€๊ฒŒ์š”^^

 

๋ผ๊ณ ํ•˜๊ธฐ์—” ๋งค๋ชฐ๋œ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์•„๊น๋‹ค

 

๋ฐ”๋กœ 3๋ฒˆ์งธ ํ’€์ด

 

์„ฑ๊ณต ํ’€์ด

import Foundation

func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    var failureLate = [Int: Double]()
    var count = stages.count
    for i in 1...N {
        var yet = 0
        for j in 0..<stages.count {
            if stages[j] == i {
                yet += 1
            }
        }
        count -= yet
        failureLate[i] = Double(yet) / Double(count)
    }
    return failureLate.sorted(by: <).sorted(by: { $0.value > $1.value }).map { $0.key }
}

 

๋ณต์žก๋„๋Š”~ for๋ฌธ์„ ์ข‹์•„ํ•ด~

์–ด์งœํ”ผ O(n)์œผ๋กœ ๋˜‘๊ฐ™์€๊ฑฐ ์•„๋‹Œ๊ฐ€..

 

stages์˜ ๊ธธ์ด ์ฆ‰ ์‚ฌ๋žŒ์ธ์›์ˆ˜ ๋งŒํผ์„ count ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด ๋†“๊ณ 

0๋ถ€ํ„ฐ stages๋ฅผ ์ซ™ ๋Œ๋ฉด์„œ ํ˜„์žฌ ์Šคํ…Œ์ด์ง€์— ๋‚จ์•„์žˆ๋Š” ์‚ฌ๋žŒ ์ˆ˜(yet) ๋งŒํผ count์—์„œ ๋นผ๊ณ 

yet / count ํ•ด์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘” ๋”•์…”๋„ˆ๋ฆฌ์— ์™ ์™ ๋„ฃ๋Š”๋‹ค

๊ทธ ํ›„ ์ •๋ ฌ์€ ์œ„์™€ ๊ฐ™์Œ

 

์ด๋ ‡๊ฒŒ ํ’€์ด์„ฑ๊ณต์„ ํ–ˆ์ง€๋งŒ

์—ฌ์ „ํžˆ ์ฐ์ฐํ•˜๋‹ค

๊ทธ๋ž˜๋„ ์ž๋ฃŒ๊ตฌ์กฐ๋ž‘ ์‹œ๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•ด์„œ

๋งˆ๋ƒฅ ์‹œ๊ฐ„์€ ๋‚ ๋ฆฐ๊ฒŒ ์•„๋‹ˆ๋ผ ์œ„๋กœ์ค‘..

์ด์ œ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋„ ์ƒ๊ฐํ•˜๋ฉด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•ด๋ณด๊ณ  ํ’€์–ด๋ณด์ž!