[코딩테스트] 신고결과받기 - Kakao 2022 BLIND

2025. 11. 5. 23:58알고리즘

문제링크

난이도

 

구현

유형

구현

소요시간

20분

회고

오랜만에 푸는 문제여서 레벨 1로 워밍업했다. 중간에 런타임 에러 나는 케이스가 있어서 
index 접근 런타임 에러 방지를 위해 길이가 0인 경우 탈출문을 추가했다.

코드

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {

    // 신고 여부 테이블
    var idTable: [String:Set<String>] = [:]

    // 차단 테이블
    var reportTable: [String: Int] = [:]

    report
        .map { $0.split(separator: " ") }
        .forEach { value in
            if value.isEmpty { return }
            let (id, target) = (String(value[0]), String(value[1]))

            if !idTable[id, default: []].contains(target) {
                reportTable[target, default: 0] += 1
                idTable[id, default: []].insert(target)
            }
        }

    // id: set id에서 차단 갯수 reduce

    return id_list
        .map { id in
            let reports = idTable[id, default: []]
            return reports.reduce(into: 0) { acc, next in
                acc += reportTable[next, default: 0] >= k ? 1 : 0
            }
        }
}