MUKER_DEV with iOS

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

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

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ

MUKER 2023. 2. 10. 23:11
 

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

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

programmers.co.kr

๋ฌธ์ œ ํ‘ธ๋Š” ๋ฐ ์žˆ์–ด ๋„์›€์ด ๋˜๋„๋ก ๋‚˜์˜ ํ’€์ด์™€ ๊ฐœ์„ ๋œ ํ’€์ด๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
๋˜ํ•œ ํ’€์ด ํ›„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ํ• ๋งŒํ•œ ํ’€์ด๋„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

- ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋‚˜์˜ ํ’€์ด๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ํ•ด๋‹น ํ’€์ด๋“ค์€ ํ’€์ด ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ ์ตœ์„ ์˜ ํ’€์ด๋Š” ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

๋ฌธ์ œ ์„ค๋ช…

 

 - id_list ์ˆœ์„œ๋Œ€๋กœ ์ •์ง€์‹œํ‚จ Id์˜ ํšŸ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

- ์ค‘์ฒฉ๋˜๋Š” ์‹ ๊ณ ๋Š” ๋ฌดํšจ์ž…๋‹ˆ๋‹ค.

- k๋ฒˆ ์‹ ๊ณ ๋‹นํ•˜๋ฉด ์•„์ด๋””๊ฐ€ ์ •์ง€๋ฉ๋‹ˆ๋‹ค.

- 10000ms์‹œ๊ฐ„ ์•ˆ์— ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 


 

์ฒซ ๋ฒˆ์งธ ํ’€์ด(์‹คํŒจ)

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
    let reportArr = Set(report).map { $0.split(separator: " ").map { String($0) } }
    var idDic = [String: [String]]()
    var banDic = [String: Int]()
    var result = Array(repeating: 0, count: id_list.count)

    for i in reportArr {
        idDic[i[0]] = (idDic[i[0]] ?? []) + [i[1]]
        banDic[i[1]] = (banDic[i[1]] ?? 0) + 1
    }

    let ban = banDic.filter { $0.1 >= k }.keys
    result = id_list.map { i in
        var count = 0
        for j in ban {
            if let id = idDic[i] {
               if id.contains(j) { count += 1 }
            }
        }
        return count
    }
    return result
}

 

์ผ€์ด์Šค 3,21๋ฒˆ์ด ์‹œ๊ฐ„์ œํ•œ์— ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

id_list.map ๋ฐ˜๋ณต ์•ˆ์—์„œ ban์„ ์ค‘์ฒฉ๋ฐ˜๋ณต ํ•˜๋Š” ๊ฒŒ

์‹œ๊ฐ„์ดˆ๊ณผ์˜ ์›์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 


 

๋‘ ๋ฒˆ์งธ ํ’€์ด(์„ฑ๊ณต)

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
    
    var idDic = [String: [String]]()
    var result = Array(repeating: 0, count: id_list.count)
    
    for i in Set(report) {
        let temp = i.split(separator: " ").map { String($0) }
        idDic[temp[1]] = (idDic[temp[1]] ?? []) + [temp[0]]
    }
    
    let banDic = Dictionary(grouping: idDic.filter { $0.1.count >= k }.values.flatMap { $0 }) { $0 }
    
    for i in id_list.enumerated() {
        if banDic[i.element] != nil {
            result[i.offset] = banDic[i.element]!.count
        }
    }
    return result
}

 

์ตœ๋Œ€ํ•œ ์ค‘์ฒฉ๋ฐ˜๋ณต์„ ์—†์• ๊ณ ์ž ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

 

idDic์˜ key๊ฐ’์—๋Š” ์‹ ๊ณ ๋‹นํ•œ ์‚ฌ๋žŒ์„ ๋„ฃ๊ณ 

value๊ฐ’์—๋Š” ํ•ด๋‹น key๋ฅผ ์‹ ๊ณ ํ•œ ์‚ฌ๋žŒ์„ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์‹œ๊ฐ„์ œํ•œ์„ ์ค„์˜€๋˜ ํ•ต์‹ฌ์€

 

result๋ฅผ id_list์˜ count๋งŒํผ 0์œผ๋กœ ์ฑ„์šด ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด ์คฌ๊ณ 

 

id_list์™€ result๋Š” ์ •ํ™•ํžˆ index๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

 

์ค‘์ฒฉ๋ฐ˜๋ณต ์—†์ด id_list๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ

banDic์— ์žˆ๋Š” ์‹ ๊ณ  ์„ฑ๊ณต ํšŸ์ˆ˜๋ฅผ

result์— ๋ฐ”๋กœ ์ด์ค„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ํ’€์ด๋Š” ์‹œ๊ฐ„์ œํ•œ์— ๊ฑธ๋ ธ๋˜

์ผ€์ด์Šค 3,21๋ฒˆ ๋ชจ๋‘ 1000ms์•ˆ์œผ๋กœ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.