본문 바로가기
알고리즘

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

by 완기 2022. 2. 18.
728x90
반응형

문제 설명 :

로또 번호가 일부 훼손되어 알 수 없는 수가 0으로 표기되고,

내가 찍은 번호와 당첨 번호가 주어질 때, 알 수 없는 수가 다 맞을 경우, 다 맞추지 못할 경우에 대비해

 

최고, 최저 순위를 리턴하는 문제.

300x250

 


일단 이 문제를 보고 정렬이 되어있지 않다고 해서 정렬을 해야겠다고 생각했고, (빠른 탐색을 위해)

 

0의 갯수를 찾아놓고 맞춘 개수 + 0의 개수는 최대한 많이 맞출 수 있는 최고 순위일 것이다.

최저 순위는 단순히 맞춘 갯수만 카운트하면 된다.

 

👨🏻‍💻 나의 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        Arrays.sort(lottos);
        Arrays.sort(win_nums);
        
        int zero =(int) Arrays.stream(lottos).filter(i-> i==0).count();
        int count =0;
        for(int i =0; i<lottos.length; i++){
            for(int j =0; j<win_nums.length;j++){
                if(lottos[i]==win_nums[j]){
                    count++;
                    continue;
                }
            }
        }
        
        return new int[]{getRank(count+zero),getRank(count)};
    }
    
    public static int getRank(int correct){
        switch(correct){
            case 6: 
                return 1;
            case 5:
                return 2;
            case 4:
                return 3;
            case 3:
                return 4;
            case 2:
                return 5;
            default:
                return 6;
        }
    }
}

일단 배열 내에서 0의 갯수를 찾아야 하기 때문에 스트림을 사용했고,

반복문을 돌면서 맞춘 갯수를 카운트하고 최고 순위가 0번째 인덱스 최저 순위가 1번째 인덱스로 리턴한다.

 

이 문제를 보고 Stream API를 공부하기를 정말 잘 했다는 생각이 든다.

아직 못봤다면 여기를 클릭해서 보러 가자.

맞춘 개수로 랭크를 리턴하는 함수는 메서드를 따로 만들어서 switch case로 맞춘 갯수로 등수를 리턴하게 했다.

728x90
728x90

댓글