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

marongrong·2022년 1월 11일
0

민우가 구매한 로또 번호와 당첨 번호를 비교해 순위를 구하는 문제!
민우의 동생이 로또에 낙서를 해놓아 몇 개의 숫자는 알아볼 수 없는 지경!
알아볼 수 없는 로또 번호를 추측해서 당첨 번호와 일치할 수 있는 최대 개수와 최저 개수를 구해 각각 최대 순위와 최저 순위를 구해야 한다.

< 입력 >
lottos = [44, 1, 0, 0, 31, 25]
win_nums = [31, 10, 45, 1, 6, 19]

< 출력 >
answer = [3, 5]

< 제한사항 >
lottos는 길이 6인 정수 배열입니다.
lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
0은 알아볼 수 없는 숫자를 의미합니다.
0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
win_nums은 길이 6인 정수 배열입니다.
win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.

< 자바코드 >

class Solution {
public int[] solution(int[] lottos, int[] win_nums) {

    int cnt = 0; //당첨번호와 비교해 일치하는 번호 개수 cnt
    int zeroCnt = 0; //동생 낙서로 알아보지 못하는 번호 개수 zeroCnt
    
    for(int lotto: lottos) { //민우의 로또번호 반복문으로 하나씩 돌리기
        if(lotto == 0) { //로또번호가 0이면 
            zeroCnt ++; //zeroCnt 1씩 증가시키기
            continue; //바로 다음 로또번호 검색하도록 continue
        } 
        //만약 로또번호가 0이 아니면
        for(int win_num: win_nums) { //당첨번호와 민우 로또번호를 비교해 
            if(win_num == lotto){ //서로 일치하면
                cnt ++; //cnt를 1씩 증가시켜줌
                break; //다음 번호를 비교하기 위해 빠져나옴
            }
        }
    }
    return new int[]{7-Math.max(cnt+zeroCnt,1),7-Math.max(cnt,1)};
    
}

}

return값 : 최고 순위는 Math.max(cnt+zeroCnt,1)를 사용해 민수가 찍은 번호들이 낙서에 의해 가려지지 않았을 때 당첨번호와 비교해 모든 번호가 일치하지 않을 경우 cnt+zeroCnt는 0이 되므로 Math.max를 통해 0일때엔 무조건 1이 되게끔 설정해주었으며 최저 순위는 Math.max(cnt,1)를 통해 비교한 번호의 cnt가 0일경우 또 무조건 1이 되게끔 설정해주었다. 그리고는 cnt가 가질 수 있는 0개에서 6개까지의 경우의 수에서 등수를 구하기 위해 방금 Math.max로 설정한 숫자를 7에서 빼주었다.

profile
what moves you makes you

0개의 댓글