문제 링크
문제 풀이
var answer: IntArray = IntArray(id_list.size) { 0 }
var newReport = report.distinct()
val notifier = Array(newReport.size) { "" }
val notified = Array(newReport.size) { "" }
var warningCnt = IntArray(id_list.size) { 0 }
answer는 정답을 담고있는 배열,
newReport는 중복을 제거한(코틀린의 distinct 사용) 새 배열이며,
신고자와 신고당한자를 notifier와 notified, 두 개의 별도의 배열로 분리하였으며,
신고횟수를 담은 warningCnt를 새로 생성하였다.
for (i in newReport.indices) warningCnt[id_list.indexOf(notified[i])]++
신고 당한 사람의 warningCnt를 1씩 늘린다
for (i in notified.indices) {
if (warningCnt[id_list.indexOf(notified[i])] >= k) {
answer[id_list.indexOf(notifier[i])]++
}
}
신고당한 사람(notifired)이 k회 이상 신고 당하였을 경우, 신고자(notifier의 id_list index값을 찾아 answer를 1씩 늘린다.
전체 소스
class Solution {
fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray {
var answer: IntArray = IntArray(id_list.size) { 0 }
var newReport = report.distinct()
val notifier = Array(newReport.size) { "" }
val notified = Array(newReport.size) { "" }
var warningCnt = IntArray(id_list.size) { 0 }
for (i in newReport.indices) {
notifier[i] = newReport[i].trim().split(" ")[0]
notified[i] = newReport[i].trim().split(" ")[1]
}
// 신고 당한 횟수
for (i in newReport.indices) warningCnt[id_list.indexOf(notified[i])]++
for (i in notified.indices) {
//신고당한 횟수가 k 이상일 경우 증가
if (warningCnt[id_list.indexOf(notified[i])] >= k) {
answer[id_list.indexOf(notifier[i])]++
}
}
return answer
}
}
마치며
코틀린이 익숙치 않다보니 사실 문제 푸는것보다 배열 다루는데 더 오래 걸렸던것 같다...
자바처럼 그저 int arr = new int[3]; 과 같이 간결하게 선언했으면 좋겠는데
생각보다 선언 방식이나 다루는 방식이 굉장히 낮설어 헤메었던것 같다....
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 2069] [Kotlin] [유클리드 호제법] 최대공약수와 최소공배수 (0) | 2022.06.14 |
---|---|
[백준 18111] [Kotlin] 마인크래프트 (0) | 2022.06.13 |
[백준 14891번] [Kotlin] 톱니바퀴 (0) | 2022.06.12 |
[백준 10828번] [Kotlin] 스택 (0) | 2022.02.25 |
[백준 2470] [Kotlin] 두 용액 (0) | 2022.02.16 |