본문 바로가기

알고리즘

[ 알고리즘 / kotlin ] 프로그래머스 lv1 모의고사

 

안녕하세요 gyub(귭)입니다 ㅎㅎㅎ 프로그래머스 Level 1 에 있는 '모의고사' 문제를 풀어봤습니다.

이번에는 설명을 주석으로 달아놨고 궁금한 점이 있으시면 댓글 달아주시면

답글로 설명해드릴게요 ㅎㅎ

 

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

 

프로그래머스

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

programmers.co.kr

 


// 각 수포자의 정해진 규칙에 의한 답
private var first = intArrayOf(1, 2, 3, 4, 5)
private val second = intArrayOf(2, 1, 2, 3, 2, 4, 2, 5)
private var third = intArrayOf(3, 3, 1, 1, 2, 2, 4, 4, 5, 5)

// 각 수포자 점수
private var score = IntArray(3)

// 리스트 활용을 위한 인덱스 변수

fun main() {


    solution(intArrayOf(1, 2, 3, 4, 5)).forEach {
        print(it)
    }
}

private fun solution(answers: IntArray): IntArray {
    lateinit var answer: IntArray

    // 주어진 정답을 1번부터 비교
    for (i in answers.indices) {
        if (first[i % first.size] == answers[i]) {
            score[0]++
        }
        if (second[i % second.size] == answers[i]) {
            score[1]++
        }
        if (third[i % third.size] == answers[i]) {
            score[2]++
        }


    }

    // 세 명의 점수가 같을 때
    if (score[0] == score[1] && score[1] == score[2]) {
        // 어차피 3명 비교하는것이기 때문에 따로 sorting 하지 않고
        // 하드코딩으로 입력
        answer = intArrayOf(1, 2, 3)
    } else {
        var tmp = ArrayList<Int>()

        val maxScore = max(score[0], max(score[1], score[2]))
        if (maxScore == score[0]) tmp.add(1)
        if (maxScore == score[1]) tmp.add(2)
        if (maxScore == score[2]) tmp.add(3)

        answer = tmp.toIntArray()

    }

    return answer
}

private fun max(x: Int, y: Int): Int {
    return if (x < y) y
    else x
}

봐주셔서 감사합니다!
질문이나 수정되어야 할 부분이 있다면 댓글로 남겨주세요!

반응형