본문 바로가기
프로그래머스/코딩연습1

[프로그래머스] 모의고사 (42840)(Kotlin)

by 유줘니 2020. 1. 20.

원본 문제 : https://programmers.co.kr/learn/courses/30/lessons/42840?language=kotlin

 

코딩테스트 연습 - 모의고사 | 프로그래머스

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3,

programmers.co.kr

 

<첫번째>

class Solution {
        fun solution(answers: IntArray): IntArray {

        val map: MutableMap<Int, Int> = mutableMapOf(1 to 0, 2 to 0, 3 to 0)

        val person1: MutableList<Int> = mutableListOf(1,2,3,4,5)
        val person2: MutableList<Int> = mutableListOf(2,1,2,3,2,4,2,5)
        val person3: MutableList<Int> = mutableListOf(3,3,1,1,2,2,4,4,5,5)

        for ( idx in answers.indices ) {
            if ( answers[idx] == person1[idx % 5]) map[1] = map.getValue(1) + 1
            if ( answers[idx] == person2[idx % 8]) map[2] = map.getValue(2) + 1
            if ( answers[idx] == person3[idx % 10]) map[3] = map.getValue(3) + 1
        }

        val maxPair: Pair<Int, Int>? = map.toList().maxBy { (_, value) -> value }
        val maxInt: Int? = maxPair?.second 
        
        val list: MutableList<Int> = mutableListOf()
        for (i in 0 until 3) 
            if(map[i+1] == maxInt) list.add(i+1)
        
        val answer = IntArray(list.size)
        for ( i in answer.indices ) {
            answer[i] = list[i]
        }

        return answer
    }
}

 

<두번째> 2020/06/08

class Solution {
    data class Person(val idx: Int, var corret: Int): Comparable<Person>{
    
    override fun compareTo(other: Person): Int {
        return this.corret - other.corret
    }
}

	fun solution(answers: IntArray): IntArray {

        val list = mutableListOf<Person>(Person(1 ,0), Person(2, 0), Person(3, 0))

        val person1 = intArrayOf(1,2,3,4,5)
        val person2 = intArrayOf(2,1,2,3,2,4,2,5)
        val person3 = intArrayOf(3,3,1,1,2,2,4,4,5,5)

        for (i in answers.indices) {
        if (answers[i] == person1[i % 5]) list[0].corret += 1
        if (answers[i] == person2[i % 8]) list[1].corret += 1
        if (answers[i] == person3[i % 10]) list[2].corret += 1
        }

        return list.filter { it.corret == list.max()!!.corret }
        .map { it.idx }
        .sorted()
        .toIntArray()
    
	}
}

댓글