Language/JAVA

[프로그래머스] 로또의 최고 순위와 최저 순위

paran21 2022. 1. 20. 18:54

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

import java.util.Arrays;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int match = 0; //일치하는 개수
        int zero = 0; //0의 개수
        for (int i = 0; i < 6; i++) {
            int a = lottos[i];
            if (Arrays.stream(win_nums).anyMatch(x -> x == a)) match++;
            if (a == 0) zero++;
        }
        //일치한 개수로 순위 출력
        //match+zero가 0일 때, 즉 모든 로또 번호를 알고 다 틀렸을 때 최고 순위는 6
        int max = (match+zero == 0) ? 6 : 7-match-zero;
        //match가 0일때 최저 순위는 6
        int min = (match == 0) ? 6 : 7-match;
        int[] answer = new int[] {max, min};
        return answer;
    }
}

Stream의 anyMatch를 사용해서 일치하는 개수를 구하고, 0의 개수도 구했다.

최고 순위의 경우 일치하는 개수 + 0의 개수(0이 다 일치한다고 가정)를 이용해 출력하였고,

최저 순위는 0이 다 틀렸다고 가정하고, 일치하는 개수만 가지고 구했다.

또, 순위를 바로 출력하기 위한 계산식의 경우 마지막 순위가 6인데 7이 나올 수 있어서 삼항연산자를 추가하였다.

 

처음에 문제를 볼 때는 문제도 길고 고려해야하는 조건이 매우 많아 보였는데,

어떤 식으로 구하면 될지 먼저 틀을 정하고 나니 구현하는건 크게 어렵지 않았다.