[Algo/Programmers] 자바 - 로또의 최고 순위와 최저 순위

RGunny·2021년 6월 6일
0

algo

목록 보기
4/20

[Algorithm/Programmers] 자바 - 로또의 최고 순위와 최저 순위

문제플랫폼난이도유형풀이 링크문제 링크
로또의 최고 순위와 최저 순위Programmers2021 Dev-Matching: 웹 백앤드 개발자(상반기)---풀이문제

문제 해석

문제1
문제에서 순위를 매기는 방법입니다. 순위를 책정하기 위해 참고해야 합니다.

문제2
경우의 수를 구하는 문제입니다. 주어진 6개 번호 에서 이미 정해진 값과 값을 알 수 없는 값(0) 을 조합하여 최고 순위와 최저 순위가 나오는 경우의 수를 구해야 합니다.

순서는 상관없고, 특정 등수가 나오는 경우의 수는 여러가지가 나올 수 있습니다.

간단히 최고 순위와 최저 순위를 구할 방법을 생각해보면,

  • 이미 정해진 값(0이 아닌 값) 으로만 책정된 순위는 최저 순위가 될 것입니다.
  • 이미 정해진 값(0이 아닌 값)에 정해지지 않은 값(0)이 최대한 당첨 번호에 맞추어 조합한 결과가 최대 순위가 될 것입니다.

문제3

  • 두 배열의 길이 모두 6으로 같고,
  • 로또 배열만 0을 포함합니다.
  • 두 배열 모두 정렬되지 않을 수 있다고 합니다.

문제4
그렇다고 합니다. 로또라는 주제는 편한 마음으로 문제에 접근을 도와주는 것에 충분합니다. 문제에는 주어진 사항 외에 다른 지식 등을 함부로 개입시키면 안됩니다.


풀이

import java.util.*;

class Solution {
    public int[] solution(int[] lottos, int[] win_nums) {
        int zeroNum = getZeroNum(lottos, win_nums);
        int minNum = getMinNum(lottos, win_nums);

        int minRank = getRank(minNum);
        int highRank = getRank(minNum + zeroNum);

        int[] ans = {highRank, minRank};

        return ans;
    }

    /**
     * 로또의 순위를 구하는 메서드
     */
    private static int getRank(int num) {
        switch (num) {
            case 2:
                return 5;
            case 3:
                return 4;
            case 4:
                return 3;
            case 5:
                return 2;
            case 6:
                return 1;
            default:
                return 6;
        }
    }

    /**
     * lottos 배열에서 0을 제외하고 당첨 번호와 일치하는 원소의 개수를 구하는 메서드
     */
    private static int getMinNum(int[] lottos, int[] win_nums) {
        int cnt = 0;
        for (int lotto : lottos) {
            for (int winNum : win_nums) {
                if (lotto == 0) continue;

                if (lotto == winNum) cnt += 1;
            }
        }
        return cnt;
    }

    /**
     * lottos 배열의 0의 개수를 구하는 메서드
     */
    private static int getZeroNum(int[] lottos, int[] win_nums) {
        int cnt = 0; // the number of zero
        Arrays.sort(lottos);
        for (int lotto : lottos) {
            if (lotto == 0)
                cnt += 1;
            else
                break;
        }
        return cnt;
    }
}

getZeroNum() 메서드와 getMinNum() 메서드를 합칠 수는 있지만, 간단한 문제이므로 이 정도로 메서드를 분리하여 풀고 끝내겠습니다.

0개의 댓글