코딩테스트/Kotlin
[프로그래머스][Kotlin] 신고 결과 받기
유노 Uknow
2022. 2. 15. 23:39
문제 링크
[프로그래머스] 신고 결과 받기 for Java - HashMap 를 적용한 풀이
문제 바로가기 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스
devdange.tistory.com
문제 풀이
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]; 과 같이 간결하게 선언했으면 좋겠는데
생각보다 선언 방식이나 다루는 방식이 굉장히 낮설어 헤메었던것 같다....