Programmers [로또의 최고 순위와 최저 순위] - 77484

2022. 1. 22. 17:39프로그래머스

문제 설명은 다음을 참고해주세요

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

 

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

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

programmers.co.kr

0의 갯수에 따라 점수가 달라집니다. 0의 갯수는 0~6개까지입니다.

 

파라미터로 들어온 lottos[], win_nums[] 를 돌면서 0을 제외한 번호가 중복된 개수를 셉니다.

그 수를 N 이라고 했을 때

 

숫자가 최고로 많이 중복된 경우: N + (0의 갯수) 개

숫자가 제일 적게 중복된 경우: N개 가 되겠습니다.

 

중복된 숫자의 갯수에 따라 swtich문을 돌면서 anser 배열에 정답을 넣어 반환해주면 되겠습니다.

 

 

소스코드:

import java.util.*;

public class Programmers_77484 {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];

        Arrays.sort(lottos);  Arrays.sort(win_nums);

        int sameNum = 0; // 중복되는 숫자 갯수
        int zeroNum = 0; // 산 로또 안에 있는 0 갯수

        for (int lotto : lottos) {
            if(lotto ==0 ) zeroNum++;
        }

        for(int i=zeroNum; i<win_nums.length; i++){
            for (int number : win_nums) {
                if(lottos[i] == number){
                    sameNum++;
                    break;
                }
            }
        }

        int lowestScore = getTempScore(sameNum);
        answer[1] = lowestScore; // 최저점
        int highestScore = getTempScore(sameNum + zeroNum);
        answer[0] = highestScore; // 최고점

        return answer;
    }

    public int getTempScore(int sameNum) {
        int tempAns;
        switch (sameNum){
            case 6: tempAns = 1; break;
            case 5: tempAns = 2; break;
            case 4: tempAns = 3; break;
            case 3: tempAns = 4; break;
            case 2: tempAns = 5; break;
            default: tempAns = 6; break;
        }
        return tempAns;
    }

}