본문 바로가기
스터디(programmers)

Kotlin] 프로그래머스 lv.1, 로또의 최고 순위와 최저 순위

by 김마리님 2023. 3. 1.

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

 

프로그래머스

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

programmers.co.kr

더보기

문제 혀가 길어서 그렇지 생각해보면 쉬움.

가려놓은건 틀렸을 수도 있고 맞을 수도 있다.

그럼 가려지지 않은 번호에서 맞은 값을 먼저 도출하고,

최대로 많이 맞았을 때(가려진 번호가 모두 정답일 때), 최소로 맞았을 때(가려진 번호가 모두 오답일 때)의 두 가지 가능성을 고려한다.

즉, 맞은 값 + 가려진 번호의 수 = 최댓값

맞은 값 = 최솟값

이렇게 값을 도출하면 된다.

숫자는 6개이므로, 도출된 값에서 + 1을 하여 순위를 결정한다.

다만, 6등은 1개를 맞거나, 혹은 0개일 때 결정되기 때문에 이 케이스를 if문으로 나누어 처리한다.

class Solution {
    fun solution(lottos: IntArray, win_nums: IntArray): IntArray {
        var answer = IntArray(2)

        var realAnswer = 0
        var unKnownAnswer = 0

        lottos.forEach {
            if(it == 0) {
                unKnownAnswer += 1
            } else {
                if(win_nums.contains(it)) {
                    realAnswer += 1
                }
            }
        }

        answer[0] = if((realAnswer + unKnownAnswer) > 0) {
            6 - (realAnswer + unKnownAnswer) + 1
        } else {
            6 - (realAnswer + unKnownAnswer)
        }
        answer[1] = if(realAnswer > 0) {
                6 - realAnswer + 1
            } else {
                6 - realAnswer
            }

        return answer
    }
}
반응형