알고리즘

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

박카스마시며코딩 2022. 2. 26. 20:01

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

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 

저는 로또 번호에 어떤 숫자가 나왔는지를 구하는 함수(init),

번호를 맞춘 개수와 0의 개수를 구하는 함수(calCorrrect),

맞춘 개수에 따른 순위를 구하는 함수(changeCntToGrade)로 나눠서 문제를 해결하였습니다.

 

 

import java.util.*;
class Solution {
    private static void init(int[] win_nums,Set<Integer> set){
        for(int num : win_nums){
            set.add(num);
        }
    }
    private static int[] calCorrect(int[] lottos,Set<Integer> numbers){
        int correctCnt = 0;
        int zeroCnt = 0;
        for(int lotto : lottos){
            if(numbers.contains(lotto)){
                correctCnt++;
            }else if(lotto == 0){
                zeroCnt++;
            }
        }
        return new int[] {correctCnt,correctCnt + zeroCnt};
    }
    private static int changeCntToGrade(int correctCnt){
        if(correctCnt == 6){
            return 1;
        }else if(correctCnt == 5){
            return 2;
        }else if(correctCnt == 4){
            return 3;
        }else if(correctCnt == 3){
            return 4;
        }else if(correctCnt == 2){
            return 5;
        }else{
            return 6;
        }
    }
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        Set<Integer> numbers = new HashSet<>();
        init(win_nums,numbers);
        int[] result = calCorrect(lottos,numbers);
        answer[0] = changeCntToGrade(result[1]);
        answer[1] = changeCntToGrade(result[0]);
        return answer;
    }
}