ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ Level1 (Swift)
    Algorithm 2022. 2. 6. 23:40
     

    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ

    ๋ฌธ์ œ ์„ค๋ช… ์‹ ์ž…์‚ฌ์› ๋ฌด์ง€๋Š” ๊ฒŒ์‹œํŒ ๋ถˆ๋Ÿ‰ ์ด์šฉ์ž๋ฅผ ์‹ ๊ณ ํ•˜๊ณ  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์ผ๋กœ ๋ฐœ์†กํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ง€๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์‹œ์Šคํ…œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ ์œ ์ €๋Š” ํ•œ ๋ฒˆ์— ํ•œ ๋ช…์˜

    programmers.co.kr

    ๋ฌธ์ œ ํ’€์ด

    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ Level1 ๋ฌธ์ œ ์ค‘ ์ œ์ผ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์•˜๋˜ ๋ฌธ์ œ.. ๋ญ”๊ฐ€ ๊ทธ๋ž˜์„œ ๋” ์–ด๋ ค์šด? ๋А๋‚Œ์œผ๋กœ ๋‹ค๊ฐ€์˜ค์ง€ ์•Š์•˜๋‚˜.. ์‹ถ๊ธฐ๋„.. 1์ฐจ ์‹œ๋„๋Š” ๋‹ต์ด ๋‚˜์™”์ง€๋งŒ ๊ณ„์† ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. Dictionary, Set์„ ์กฐ๋งŒ๊ฐ„ ๋‹ค์‹œ ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค.

    1์ฐจ ์‹œ๋„

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

    2์ฐจ ์‹œ๋„

    ๋จผ์ € emailResult์— ์ด๋ฉ”์ผ ๊ฒฐ๊ณผ๋ฅผ [String: Int] ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š”๋ฐ, String์—๋Š” ์œ ์ € ์ด๋ฆ„, Int์—๋Š” ๋ฐ›์„ ์ด๋ฉ”์ผ ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค. for ๋ฌธ์œผ๋กœ ์œ ์ € ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ–ˆ๊ณ , ์ด๋ฉ”์ผ ์ˆ˜๋Š” ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ๋‹ค.

     

    var emailResult = [String: Int]() // ์ด๋ฉ”์ผ ๊ฒฐ๊ณผ ์ €์žฅ
    for i in 0..<id_list.count {
        emailResult.updateValue(0, forKey: id_list[i])
    }

     

     

     

    userInfoDic์ด๋ผ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ Key์—๋Š” ์‹ ๊ณ  ๋‹นํ•œ ์œ ์ € ID๋ฅผ, Value์—๋Š” ์‹ ๊ณ  ๋‹นํ•œ ์œ ์ € ID๋ฅผ ์‹ ๊ณ ํ•œ ๋ชจ๋“  ์œ ์ € ID๋ฅผ ์ €์žฅํ•œ๋‹ค.

    var userInfoDic = [String: [String]]() // [์‹ ๊ณ  ๋‹นํ•œ ์œ ์ € ID: [์‹ ๊ณ ํ•œ ์œ ์ € ID]]

     

     

     

    for ๋ฌธ์„ ๋Œ๋ฉด์„œ report๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ userInfoDic์„ ๊ตฌํ•ด์ค€๋‹ค.

    ๋จผ์ € report๋ฅผ userId์™€ targetId๋กœ ๋‚˜๋ˆ„๊ณ , 2๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ ์„œ ์ฒดํฌํ•œ๋‹ค.

     

     

    userInfoDic์— targetId๋ฅผ ๊ฐ€์ง„ ํ‚ค๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ

    • ํ•œ ์œ ์ €๊ฐ€ ๋™์ผํ•œ ์œ ์ €๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹ ๊ณ ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด, targetId๋ฅผ ๊ฐ€์ง„ ํ‚ค๊ฐ€ ๊ฐ’์œผ๋กœ userId๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ userId๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

     

    userInfoDic์— targetId๋ฅผ ๊ฐ€์ง„ ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

    • ํ•ด๋‹น ํ‚ค (targetId)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ฐ’์œผ๋กœ userId (์‹ ๊ณ ํ•œ ์œ ์ € ID)๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
    for i in report {
        let reportArr = i.components(separatedBy: " ").map { String($0) }
        let userId = reportArr[0] // ์‹ ๊ณ ํ•œ ์œ ์ € ID
        let targetId = reportArr[1] // ์‹ ๊ณ  ๋‹นํ•œ ์œ ์ € ID
        
        if userInfoDic[targetId] == nil {
            userInfoDic.updateValue([userId], forKey: targetId)
        } else {
            if !userInfoDic[targetId]!.contains(userId) {
                userInfoDic[targetId]!.append(userId)
            }
        }
    }

     

     

    ๊ทธ๋ฆฌ๊ณ  ์ด๋ฉ”์ผ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด userInfoDic.keys๋กœ for๋ฌธ์„ ๋Œ๋ฆฐ๋‹ค.

    ์ด ๋•Œ userInfoDic์˜ ํ‚ค๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ’์ด k๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด, ํ•ด๋‹น ํ‚ค๋ฅผ ๊ฐ–๋Š” ์œ ์ €๋“ค์„ ์ฐพ์•„์„œ emailResult์˜ ์ด๋ฉ”์ผ ์ˆ˜๋ฅผ +1 ํ•ด์ค€๋‹ค.

    for targetId in userInfoDic.keys {
        if userInfoDic[targetId]!.count >= k {
            for n in userInfoDic[targetId]! {
                emailResult[n]! += 1
            }
        }
    }

     

     

    ๋งˆ์ง€๋ง‰์œผ๋กœ, id_list์—์„œ ์œ ์ € ๋ชฉ๋ก์„ ์ฐจ๋ก€๋Œ€๋กœ for ๋ฌธ์œผ๋กœ ๋Œ๋ฆฌ๋ฉด์„œ emailResult[id]์˜ ๊ฐ’์„ ์ƒˆ๋กœ์šด ans ๋ฐฐ์—ด์— ์ฐจ๋ก€๋Œ€๋กœ ์ถ”๊ฐ€ํ•ด์„œ ans๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ์ •๋‹ต์ด๋‹ค.

    var ans = [Int]()
    for id in id_list {
        ans.append(emailResult[id]!)
    }

     

    ์†Œ์Šค ์ฝ”๋“œ (Swift)

    //
    //  แ„‰แ…ตแ†ซแ„€แ…ฉแ„€แ…งแ†ฏแ„€แ…ชแ„‡แ…กแ†ฎแ„€แ…ต.swift
    //  Programmers
    //
    //  Created by ์•ˆ์ƒํฌ on 2022/02/06.
    //
    
    import Foundation
    
    func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
        var emailResult = [String: Int]() // ์ด๋ฉ”์ผ ๊ฒฐ๊ณผ ์ €์žฅ
        for i in 0..<id_list.count {
            emailResult.updateValue(0, forKey: id_list[i])
        }
        
        var userInfoDic = [String: [String]]() // [์‹ ๊ณ  ๋‹นํ•œ ์œ ์ € ID: [์‹ ๊ณ ํ•œ ์œ ์ € ID]]
        for i in report {
            let reportArr = i.components(separatedBy: " ").map { String($0) }
            let userId = reportArr[0] // ์‹ ๊ณ ํ•œ ์œ ์ € ID
            let targetId = reportArr[1] // ์‹ ๊ณ  ๋‹นํ•œ ์œ ์ € ID
            
            if userInfoDic[targetId] == nil {
                userInfoDic.updateValue([userId], forKey: targetId)
            } else {
                if !userInfoDic[targetId]!.contains(userId) {
                    userInfoDic[targetId]!.append(userId)
                }
            }
        }
        
        for targetId in userInfoDic.keys {
            if userInfoDic[targetId]!.count >= k {
                for n in userInfoDic[targetId]! {
                    emailResult[n]! += 1
                }
            }
        }
        
        var ans = [Int]()
        for id in id_list {
            ans.append(emailResult[id]!)
        }
        
        return ans
    }

    ๋Œ“๊ธ€

Designed by Tistory.