문제 | 플랫폼 | 난이도 | 유형 | 풀이 링크 | 문제 링크 |
---|---|---|---|---|---|
로또의 최고 순위와 최저 순위 | Programmers | 2021 Dev-Matching: 웹 백앤드 개발자(상반기) | --- | 풀이 | 문제 |
문제에서 순위를 매기는 방법입니다. 순위를 책정하기 위해 참고해야 합니다.
경우의 수를 구하는 문제입니다. 주어진 6개 번호 에서 이미 정해진 값과 값을 알 수 없는 값(0) 을 조합하여 최고 순위와 최저 순위가 나오는 경우의 수를 구해야 합니다.
순서는 상관없고, 특정 등수가 나오는 경우의 수는 여러가지가 나올 수 있습니다.
간단히 최고 순위와 최저 순위를 구할 방법을 생각해보면,
그렇다고 합니다. 로또라는 주제는 편한 마음으로 문제에 접근을 도와주는 것에 충분합니다. 문제에는 주어진 사항 외에 다른 지식 등을 함부로 개입시키면 안됩니다.
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() 메서드를 합칠 수는 있지만, 간단한 문제이므로 이 정도로 메서드를 분리하여 풀고 끝내겠습니다.