TLI/코드카타
2024.06.06 TIL 코트카타 74번(신고 결과 받기)
jaeseonyoo
2024. 6. 6. 23:10
fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray {
val reporterToTarget = mutableMapOf<String, MutableSet<String>>()
for(complaint in report) {
val splitComplaint = complaint.split(" ")
val reporter = splitComplaint[0]
val target = splitComplaint[1]
val targetSet = reporterToTarget[reporter]
if(targetSet == null)
reporterToTarget[reporter] = mutableSetOf(target)
else
targetSet.add(target)
}
val reporterIter = reporterToTarget.entries.iterator()
val targetToCount = mutableMapOf<String, Int>()
while (reporterIter.hasNext()) {
val targetIter = reporterIter.next().value.iterator()
while (targetIter.hasNext()) {
val target = targetIter.next()
targetToCount[target] = targetToCount.getOrDefault(target, 0) + 1
}
}
val answer = IntArray(id_list.size)
for(idIndex in id_list.indices) {
val id = id_list[idIndex]
val targets = reporterToTarget[id]
var numOverK = 0
if(targets != null) {
val targetIter = targets.iterator()
while (targetIter.hasNext()) {
val target = targetIter.next()
if(targetToCount[target]!! >= k) {
numOverK++
}
}
}
answer[idIndex] = numOverK
}
return answer
}
풀이과정
1. reporterToTarget(key : 신고자, target : 피신고자)을 만들어 접수 내용을 정리한다.
1.1. target은 set으로 만들어서 한명의 신고자가 한 명의 신고를 여러 번 했을 때 중복을 제거한다.
2. reporterToTarget 맵을 다 만들어서 신고당한사람이 몇 번 당했는지 count하는 맵(targetToCount)를 만든다.
3. 다시 reporterToTarget을 iterator로 순회하면서 targetToCount에서 확인해 본인이 신고한 사람 중 신고 횟수가 k이상이 사람을 카운트한다.
포인트
- reporterToTarget에서 target을 set으로 만들어 한 신고자가 한 명의 피 신고자를 여러 번 신고하는 것에 중복을 제거한다.