https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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를 잘 활용하여 푸신 것 같다. 

+ Recent posts