조앤의 기술블로그

[프로그래머스] 로또의 최고 순위와 최저 순위 (java) 본문

Programming/프로그래머스

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

쬬앤 2021. 6. 27. 18:38

[접근법]

Set으로 변환해서 번호 포함 여부 확인한다.

  1. 일치 개수 확인 → 최저 등수
  2. 일치 개수 확인 + 모르는 번호 개수 → 최고 등수

개수 별 등수 확인은 → case문으로

 

[코드]

import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int[] answer = new int[2];
        int lowRank = -1;
        int highRank = -1;
        
        Set<Integer> lottosSet = new HashSet<>();
        Set<Integer> winSet = new HashSet<>();
        
        for(int i = 0; i < lottos.length; i++){
            lottosSet.add(lottos[i]);
            winSet.add(win_nums[i]);
        }
        
        int sameNums = numberOfSame(lottosSet, winSet);
        int zeroNums = numberOfZero(lottos);
        
        lowRank = lottoRank(sameNums);
        highRank = lottoRank(sameNums + zeroNums);
        
        answer[0] = highRank;
        answer[1] = lowRank;
        
        return answer;
    }
    
    static int lottoRank(int num){
        //num은 일치하는 번호의 개수
        if(num > 6)
            return -1;
        
        int rank = 0;
        switch(num){
            case 6:
                rank = 1;
                break;
            case 5:
                rank = 2;
                break;
            case 4:
                rank = 3;
                break;
            case 3:
                rank = 4;
                break;
            case 2:
                rank = 5;
                break;
            default:
                rank = 6;
                break;
        }
        
        return rank;
    }
    
    //Set 교집합 개수 구하는 함수
    static int numberOfSame(Set<Integer> set1, Set<Integer> set2){
        int count = 0;
        for(Integer e : set2){
            if(set1.contains(e))
                count++;
        }
        return count;
    }
    //로또 번호의 0의 개수 구하기
    static int numberOfZero(int[] arr){
        int count = 0;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == 0)
                count++;
        }
        return count;
    }
}

 

교집합 구하는 함수 참고 링크 

http://docs.likejazz.com/intersection-of-two-sets/

 

Java의 두 Set 교집합 최적화 · The Missing Papers

Java의 두 Set 교집합 최적화 21 May 2015 중복 제거를 위해 250개의 문서를 상호 비교할 경우 총 31,125번의 비교를 진행하게 된다. 이에 따른 CPU 비용이 상당히 높은데 이를 보다 최적화하여 개선할 수

docs.likejazz.com