JAVA

[Java] Coding Test (Lotto)

SangRok Jung 2022. 8. 4. 21:06
반응형

문제

 


로또는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다.

아래는 로또 순위를 정하는 방식입니다.

순위 당첨 내용
1 6개 번호 일치
2 5개 번호 일치
3 4개 번호 일치
4 3개 번호 일치
5 2개 번호 일치
6 그 외

 

 

로또의 일부 번호를 알수 없을 때 당점 가능한 최고 순위와 최저 순위를 반환하는 method를 구현하시오.

 

 

  • 알수 없는 번호는 0이다.
  • 순서와 상관없이 구매한 로또에 당첨 번호와 일치하는 번호가 있으면 맞힌걸로 인정한다.
  • lottos는 길이가 6인 정수 배열이다.
  • lottos의 원소는 0이상 45이하이다.
  • lottos에 0을 제외한 다른 숫자들은 2개 이상 담겨있지 않는다.
  • win_nums는 길이가 6인 정수 배열이다.
  • win_nums의 모든 원소는 1이상 45이하인 정수다.
  • win_nums에 같은 숫자가 2개 이상 담겨있지 않는다.
  • win_nums의 원소들은 정렬되어 있지 않을 수 도 있다.

 

▶ 입출력 예

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]

 

 

 

 

 

 

 

해법


본 문제는 컬렉션 내의 중복의 요소들을 쉽게 제거 할 수 있는 장점을 가진 HashSet을 이용하여 해결합니다.

 

  1. HashSet 정의 및 데이터 입력
  2. 로또 번호중 0의 개수 확인.
  3. 당첨된 로또 번호의 개수 확인.
  4. 등수를 반환할 method 정의.
  5. 0의 개수와 당첨된 로또 번호의 개수를 참고하여 최고 등수, 최저 등수 반환.

 

import java.util.*;

    public static int[] soulution(int[] lottos, int[] win_nums){
        // 답.
        int[] answer = new int[2];

        // set : 데이터의 중복 저장을 허용하지 않는다.
        HashSet<Integer> lottoNum = new HashSet<Integer>();
        HashSet<Integer> win_num = new HashSet<Integer>();

        int checkCnt = 0;   //0을 제외한 로또 번호가 맞은 횟수
        int zeroCnt = 0;    // 0의 횟수


        // lottoNum에 lottos의 번호들을 입력.
        for(int i : lottos){
            lottoNum.add(i);

            if(i == 0){ // 0이 있는 경우
                zeroCnt += 1;
            }
        }

        // win_num에 win_nums를 입력.
        for(int i : win_nums){
            win_num.add(i);
        }

        // 0을 제외한 로또 번호가 맞은 횟수 검사.
        lottoNum.retainAll(win_num);
        checkCnt = lottoNum.size();

        int maxLank = lankCheck(checkCnt + zeroCnt); // 가장 높은 등수
        int minLank = lankCheck(checkCnt); //가장 낮은 등수

        answer[0] = maxLank;
        answer[1] = minLank;

        return answer;
    }

    public static int lankCheck(int num){
        int lank;

        if(num == 2){
            lank = 5;
        }
        else if(num == 3){
            lank = 4;
        }
        else if(num == 4){
            lank = 3;
        }
        else if(num == 5){
            lank = 2;
        }
        else if(num == 6){
            lank = 1;
        }
        else{
            lank = 6;
        }

        return lank;
    }
반응형

'JAVA' 카테고리의 다른 글

[Java] Coding Test (크레인 인형뽑기 게임)  (0) 2022.08.09
[Java] Coding Test (Pick two and add them)  (0) 2022.08.08
[Java] Annotation  (0) 2022.08.04
[Java] enum(열거형)  (0) 2022.08.03
[Java] Generic Programming  (0) 2022.08.01