풀이
1) report
를 [[String]]
로 분해한다
let setReport = Set(report).map { $0.split(separator: " ").map { String($0) } }
2) [신고 당한 사람: [신고한 사람]]
꼴의 딕셔너리(Dictionary)를 만든다
var reportDict = [String: [String]]()
for i in setReport {
if reportDict[i[1]] == nil {
reportDict[i[1]] = [i[0]]
} else {
reportDict[i[1]]!.append(i[0])
}
}
2.5) [사람: 받을 메일 개수]
꼴의 딕셔너리를 만든다
var mailDict = [String: Int]()
for i in id_list {
mailDict[i] = 0
}
3) 신고 당한 사람의 신고자의 수가 k 이상이면 mailDict
에 신고자들에게 +1씩 해준다
- 신고 당한 사람의 신고자의 수가 k 이상이란 뜻은 신고 당한 사람이 정지를 당한다는 뜻이자 신고자들에게 메일을 발송해야 한다는 뜻이다.
for value in reportDict.values {
if value.count >= k {
for i in value {
mailDict[i]! += 1
}
}
}
4) mailDict을 반환타입에 맞춰 반환하면 된다
var ret = [Int]()
for i in id_list {
ret.append(mailDict[i]!)
}
return ret
전체 코드
import Foundation
func solution(_ id_list: [String], _ report: [String], _ k: Int) -> [Int] {
let setReport = Set(report).map { $0.split(separator: " ").map { String($0) } }
var reportDict = [String: [String]]()
for i in setReport {
if reportDict[i[1]] == nil {
reportDict[i[1]] = [i[0]]
} else {
reportDict[i[1]]!.append(i[0])
}
}
var mailDict = [String: Int]()
for i in id_list {
mailDict[i] = 0
}
for value in reportDict.values {
if value.count >= k {
for i in value {
mailDict[i]! += 1
}
}
}
var ret = [Int]()
for i in id_list {
ret.append(mailDict[i]!)
}
return ret
}