Algorithm/프로그래머스

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

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

 

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

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

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        
        /*
        1. 0 분리 -> 2개 배열 space complexity
        2. sort each int arrays
        3. check
          3-1 lottos[i] == win_nums[0] cnt++
          3-2 lottos[i] < win_nums[0] -> win_nums[1]...
          3-3 lottos[i] > win_nums[0] -> i++
        4. cnt -> 최소 cnt+ 0개수 -> 최대
        */
        // #1
        int zeroCnt = 0;
        int winCnt = 0;
        ArrayList<Integer> seperateLottos = new ArrayList<Integer>();
        for(int temp : lottos) {
            if(temp == 0){
                zeroCnt++;
            }else{
                seperateLottos.add(temp);
            }
        }
        // #2
        Collections.sort(seperateLottos);
        Arrays.sort(win_nums);
        
        // #3
        for(int temp : seperateLottos){
            for(int idx = 0; idx < 6; idx++) {
                if(temp == win_nums[idx]) winCnt++;
                else if(temp > win_nums[idx]) continue;
            }
        }
        int minimum = 0;
        int maximum = 0;
        int[] guideNumber = {6, 5, 4, 3, 2, 1, 0};
        // #4
        for(int idx = 0; idx < guideNumber.length; idx++){
            if(guideNumber[idx] == winCnt) {
                minimum = idx + 1;
                break;
            }
        }
        
        if(minimum > 6) minimum = 6;
        maximum = minimum - zeroCnt;
        if(maximum < 1) maximum = 1;
        int[] answer = {maximum, minimum};
        return answer;
    }
}