본문 바로가기
프로그래머스/[프로그래머스 - JAVA] Lv.1

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

by 코딩하는 흰둥이 2023. 4. 9.
반응형


입출력 예

lottos win_nums result
[44, 1, 0, 0, 31, 25] [31, 10, 45, 1, 6, 19] [3, 5]
[0, 0, 0, 0, 0, 0] [38, 19, 20, 40, 15, 25] [1, 6]
[45, 4, 35, 20, 3, 9] [20, 9, 3, 45, 4, 35] [1, 1]

 

입출력 예 설명

입출력 예 #1

문제 예시와 같습니다.

 

 

입출력 예 #2

알아볼 수 없는 번호들이 아래와 같았다면, 1등과 6등에 당첨될 수 있습니다.

당첨 번호 38 19 20 40 15 25 결과
최고 순위 번호 0 -> 38 0 -> 19 0 -> 29 0 -> 40 0 -> 15 0 -> 25 6개 번호 일치, 1등
최저 순위 번호 0 -> 21 0 -> 22 0 -> 23 0 -> 24 0 -> 26 0 -> 27 0개 번호 일치, 6등

 

 

입출력 예 #3

민우가 구매한 로또의 번호와 당첨 번호가 모두 일치하므로, 최고 순위와 최저 순위는 모두 1등입니다.


1. 실제로 사용되는 로또 순위의 결정 방식과는 약간 다르지만, 이 문제에서는 지문에 명시된 대로 로또 순위를 결정하도록 합니다.

 

 


  • 내 풀이
import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = {};
        
        // 최고 순위 , 최저 순위 번호
        answer = new int[2];

        // 로또 당첨 개수에 따른 순서
        int[] equalNum = {0, 6, 5, 4, 3, 2};
        // 일치하는 로또 번호 개수
        int equalCheck = 0;
        // 0으로 체크된 로또 번호 개수
        int zeroCheck = 0;
        
        Arrays.sort(lottos);
        Arrays.sort(win_nums);

        for (int i = 0; i < lottos.length; i++) {
            for (int j = 0; j < win_nums.length; j++) {
                // 자신의 로또 번호와 당첨 로또 번호가 같으면 ++
                if (lottos[i] == win_nums[j]) {
                    equalCheck++;
                }
            }
            // 자신의 로또 번호에 0 이 있다면 ++
            if (lottos[i] == 0) {
                zeroCheck++;
            }
        }

        // 0이 6개면 최고 1 , 최저 6
        if (zeroCheck == 6) {
            answer[0] = 1;
            answer[1] = 6;
        } else if(equalCheck != 0 || zeroCheck != 0){
            // 일치하는 번호의 등수와 (일치하는 번호 + 0번의 개수)의 등수
            for (int i = 0; i < equalNum.length; i++) {
                if (equalCheck == equalNum[i]) {
                    answer[0] = i;
                }
                // 일치하는 번호가 1개인 경우
                if(equalCheck == 1){
                    answer[0] = 6;
                }

                if ((equalCheck + zeroCheck) == equalNum[i]) {
                    answer[1] = i;
                }
            }
        }else {
            // 일치하는 번호가 하나도 없을 경우
            answer[0] = 6;
            answer[1] = 6;
        }

        // 최고,최저 순위로 나타내기 위한 sort
        Arrays.sort(answer);
        
        return answer;
    }
}

switch문을 사용안하고 간단하게 풀어보려다가 되려 더 길어진거 같다

정리만 좀 더 하면 1/3은 줄어들거같긴한데...

 

 

  • 다른 사람 풀이
class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];

        int cnt1 = 0;
        int cnt2 = 0;
        for(int i : lottos) {
            if(i == 0) {
                cnt1++;
                continue;
            }
            for(int j : win_nums) {
                if(i == j) cnt2++;
            }
        }


        answer[0] = getGrade(cnt1+cnt2);
        answer[1] = getGrade(cnt2);

        return answer;
    }

    public int getGrade(int n) {
        switch(n) {
            case 6 :
                return 1;
            case 5 :
                return 2;
            case 4 :
                return 3;
            case 3 :
                return 4;
            case 2 :
                return 5;
            default :
                return 6;
        }
    }
}

댓글