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으로 만들어 한 신고자가 한 명의 피 신고자를 여러 번 신고하는 것에 중복을 제거한다.
'TLI > 코드카타' 카테고리의 다른 글
2024.06.08 TIL 코트카타 76번(JadenCase 문자열 만들기) (1) | 2024.06.08 |
---|---|
2024.06.07 TIL 코트카타 75번(최댓값과 최솟값) (0) | 2024.06.07 |
2024.06.05 TIL 코트카타 73번(공원 산책) (0) | 2024.06.05 |
2024.06.04 TIL 코트카타 72번(달리기 경주) (0) | 2024.06.04 |
2024.06.03 TIL 코트카타 71번(개인정보 수집 유효기간) (0) | 2024.06.03 |