티스토리 뷰

로또의 최고 순위와 최저 순위

풀이과정

  • 로또의 최고 순위는 알아볼 수 있는 번호가 맞은 갯수 + 알아볼 수 없는 번호도 모두 맞을 경우 를 통해 알 수 있다.
  • 로또의 최저 순위는 알아볼 수 없는 번호가 모두 틀렸을 때, 알아볼 수 있는 번호 중 맞은 갯수 를 통해 알 수 있다.

이를 찾기 위해 아래의 과정을 수행한다.

  1. 알아볼 수 없는 번호를 모두 제거하고, 알아볼 수 있는 번호만 남긴다. 이 과정에서 알아볼 수 없는 수의 갯수를 알 수 있다.
  2. 알아볼 수 있는 번호 중 정답 번호와 일치하는 것들의 갯수를 센다.
  3. 위 1과 2에서 얻은 결과를 바탕으로 등수를 계산한다. 이 때, 맞은 갯수가 0개 또는 1개일 경우 모두 6등이므로 이 경우에 대한 고려가 필요하다.
    여기서는 알아볼 수 있는 번호 중 정답의 갯수가 0개일 경우 계산편의성을 위해서 1개의 정답이 있는 것으로 만들어 주었다.

Code

import java.util.Arrays;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        // 알아볼 수 있는 번호만 남기기
        lottos = Arrays.stream(lottos)
                .filter(number -> number != 0)
                .toArray();

        // 알아볼 수 없는 번호의 갯수
        int unknownCount = 6 - lottos.length;

        // 알아볼 수 있는 숫자 중 정답을 맞춘 갯수가 0개나 1개나 동일하게 6등이 최저 순위이다.
        long matchedCount = Math.max(Arrays.stream(lottos)
                .filter(number ->
                        Arrays.stream(win_nums)
                                .anyMatch(i -> i == number)
                )
                .count(), 1);

        int highest = Math.max(1, (int)(7 - (matchedCount + unknownCount)));
        return new int[] {highest, 7 - (int) matchedCount};
    }
}

결과

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함