728x90
kotlin을 공부하면서 문법을 하나하나 하는것보다 c++로 풀었던것을 다시 kotlin으로 풀어보는것이 도움이 되지 않을까 해서 다른 분들의 코드를 해석하는것을 시작하였다.
(문제시 삭제하겠음)
문제
https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
참고 코드
[프로그래머스] 신고 결과 받기 in Kotlin
Kotlin에서 Collection을 사용해보았고, Collection 의 Transformation에서 몇몇 관용구를 사용해보았습니다.
velog.io
728x90
해석
첫 코틀린 경험 후기: 신기하다...
class Solution {
fun solution(id_list: Array<String>, report: Array<String>, k: Int): IntArray {
val reporterAndTarget = report.map{val reporterId = it.substringBefore(' ') // ' '기준으로 나눔
val targetId = it.substringAfter(' ')
Pair(reporterId, targetId)}.distinct()
// 한 유저를여러번 신고할 수 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리된다. => distinct()
for((reporter, target) in reporterAndTarget)
println(reporter + " " + target)
// groupingBy는 groupBy + 연산하는 용도
// targetId별로 grouping
val suspendedId = reporterAndTarget.groupingBy{(_, targetId) -> targetId}
.eachCount() // 각 요소를 count해서
.filter{it.value >= k} // k이상인 것들을 filtering
.keys // 그것의 key값들을 대입
println(suspendedId)
// targetId가 suspendedId에 속하는것을 filtering
val reporterIdToSendMail = reporterAndTarget.filter{(_, targetId) -> targetId in suspendedId}
// reporter로 grouping
.groupingBy{(reporterId, _) -> reporterId}
.eachCount() // reporter가 메일 받는 횟수
println(reporterIdToSendMail)
// getOrDefault : 지정된 키에 해당하는 값을 반환하거나 이러한 키가 map에 없는 경우 defaultValue를 반환
return id_list.map{reporterIdToSendMail.getOrDefault(it, 0)} // 여기까진 List
.toIntArray() // 이걸 해줘야 IntArray가 됨
}
}728x90
'note > language-kotlin' 카테고리의 다른 글
| [programmers] Lv.1 신규 아이디 추천(Kotlin 공부용) (0) | 2022.05.08 |
|---|---|
| [programmers] Lv.1 로또의 최고 순위와 최저 순위(Kotlin 공부용) (0) | 2022.05.08 |
댓글