신고결과 받기
해당 유저가 신고당한 횟수 k를 초과하면 해당 유저를 신고한 유저들이 처리결과 메일을 받게 되는데 이 처리결과 메일을 받은 횟수를 배열로 반환해줘야 한다, 단 중복된 신고는 처리하지 않는다.
나의코드
class Solution {
fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray {
var answer: IntArray = intArrayOf()
var setReport = report.toSet()
var mapId = mutableMapOf<String, Int>()
for(i in id_list){
mapId[i] = 0
}
var mapResult = mapId.toMutableMap()
for (i in setReport){
val key = i.split(" ")[1]
if(key in mapId){
mapId[key] = mapId[key]!! + 1
}
}
val filteredKey = mapId.filter{it.value >= k}
for(i in setReport){
val reporter = i.split(" ")[0]
val reported = i.split(" ")[1]
if(reported in filteredKey){
mapResult[reporter] = mapResult[reporter]!! + 1
}
}
for(i in mapResult){
answer += i.value
}
return answer
}
}
처음에 거의 모든 문제에서 틀리게 나왔는데 k를 2로 잘못넣어주고 setReport를 report로 잘못넣은 거 였어서 이부분을 바꿔 해결해줌.
또 몇몇문제에서 "출력크기초과"오류가 났는데 println()을 제거해주지 않아 생긴 문제였음
다른사람 풀이
class Solution {
fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray =
report.map { it.split(" ") }
.groupBy { it[1] }
.asSequence()
.map { it.value.distinct() }
.filter { it.size >= k }
.flatten()
.map { it[0] }
.groupingBy { it }
.eachCount()
.run { id_list.map { getOrDefault(it, 0) }.toIntArray() }
}
기억할 점
array를 set으로 간단하게 만들어줄 수 있다.
var setReport = report.toSet()
map을 copy해야할때 toMutableMap을 이용
var mapResult = mapId.toMutableMap()
map에 값을 넣어줄때 key값이 null이면 안되므로 !!나 null이들어가지않는 방법을 추가해주어야함
mapId[key] = mapId[key]!! + 1