https://school.programmers.co.kr/learn/courses/30/lessons/42840
class Solution {
fun solution(answers: IntArray): IntArray {
var answer = intArrayOf()
val numArr = arrayOf(intArrayOf(1,2,3,4,5),intArrayOf(2,1,2,3,2,4,2,5),intArrayOf(3,3,1,1,2,2,4,4,5,5))
val score = IntArray(3)
for (i in 0 until answers.size) {
if(numArr[0][i]==answers[i%5] ) {
score[0]++
}
if(numArr[1][i]==answers[i%8] ) {
score[1]++
}
if(numArr[2][i]==answers[i%10] ) {
score[2]++
}
}
if(score[0] == score[1] && score[1] == score[2]) {
answer = intArrayOf(1,2,3)
} else {
var temp = arrayListOf<Int>()
val maxScore = maxOf(score[0], maxOf(score[1], score[2]))
if (maxScore == score[0]) temp.add(1)
if (maxScore == score[1]) temp.add(2)
if (maxScore == score[2]) temp.add(3)
answer = temp.toIntArray()
}
return answer
}
}
앞선 테스트 1,2는 통과했지만 무식하게 이런식으로 짜니 제출한 결과는,, 런타임 에러 잔뜩
좀 더 단순하게 만들어보려 했으나 시간이 너무 많이 투자됐다,, 잘하신 분의 코드를 보자.
class Solution {
fun solution(answers: IntArray): IntArray {
val userAnswers = arrayOf(
intArrayOf(1,2,3,4,5), intArrayOf(2,1,2,3,2,4,2,5), intArrayOf(3,3,1,1,2,2,4,4,5,5))
val cnt = IntArray(3)
val answer = mutableListOf<Int>()
userAnswers.forEachIndexed { i, userAns ->
cnt[i] = answers.filterIndexed { j, ans -> ans == userAns[j % userAns.size] }.count()
}
cnt.forEachIndexed{ idx, i -> if(cnt.max() == i) answer.add(idx + 1) }
return answer.toIntArray()
}
}
출처: https://yline.tistory.com/107 [Y_LINE's_Repository:티스토리]
나와 비슷하게 배열안에 배열을 넣어 푸셨다. forEach 와 indexed를 잘 활용하여 푸신 것 같다.
'Code KATA' 카테고리의 다른 글
Programmers 덧칠하기 with Kotlin (1) | 2023.12.07 |
---|---|
Programmers 소수 만들기 with Kotlin (0) | 2023.12.06 |
Programmers 사과 장수 with Kotlin (1) | 2023.12.04 |
Programmers 카드 뭉치 with Kotlin (0) | 2023.12.01 |
Programmers 2016년 with Kotlin (0) | 2023.11.30 |