# Algorithm/--- 프로그래머스

[카카오] 신고 결과 받기

jiniz.ll 2022. 3. 14. 18:15

 

문제

  • 신고 횟수에 제한 없이 다른 유저를 계속 신고할 수 있음
  • 한 유저에 대해서도 여러 번 신고가 가능하나, 동일 유저에 대한 신고 횟수는 1회로 처리됨

 

  • k번 이상 신고된 유저는 이용이 정지됨
  • 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 보냄
  • 각 유저 별로 메일을 받은 횟수 반환하기

 

  • id 개수 : 2이상 1,000 이하. 중복 없음
  • report 개수 : 1이상 200,000 이하. 이용자_id 신고한_id 형태의 문자열
  • k : 1이상 200 이하

 

Idea

  • 각 유저 별로 신고한 id 목록 구하기
  • 각 유저 별로 신고 받은 횟수 구하기
  • 각 유저 별로 신고한 id 가 k 이상인지 확인하여 메일 받은 횟수 구하기

 

Code

Swift

import Foundation

func solution(_ id_list:[String], _ report:[String], _ k:Int) -> [Int] {
    
    var report_log: [String:[String]] = [:]
    var report_count: [String:Int] = [:]
    
    for log in report {
        let l = log.components(separatedBy: " ")
        let report_list = report_log[l[0]] ?? []
        if !report_list.contains(l[1]) {
            report_log[l[0]] = report_list + [l[1]]
        
            let count = report_count[l[1]] ?? 0
            report_count[l[1]] = count + 1
        }
    }
    
    var result: [Int] = []
    for id in id_list {
        if let report_list = report_log[id] {
            var count = 0
            for name in report_list {
                if let n = report_count[name], n >= k {
                    count += 1
                }
            }
            result.append(count)
        } else {
            result.append(0)
        }
    }
    
    return result
}

'# Algorithm > --- 프로그래머스' 카테고리의 다른 글

[프로그래머스] 배달 with Swift  (0) 2022.06.23
[카카오] 순위 검색  (0) 2022.03.15
[카카오] 튜플  (0) 2022.03.14
[프로그래머스] 최솟값 만들기  (0) 2022.01.26
[프로그래머스] 피보나치 수  (0) 2022.01.26