조앤의 기술블로그
[프로그래머스] 로또의 최고 순위와 최저 순위 (java) 본문
[접근법]
Set으로 변환해서 번호 포함 여부 확인한다.
- 일치 개수 확인 → 최저 등수
- 일치 개수 확인 + 모르는 번호 개수 → 최고 등수
개수 별 등수 확인은 → 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/
'Programming > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 (java) (0) | 2021.06.27 |
---|---|
[프로그래머스] 음양 더하기 (java) (0) | 2021.06.27 |
[프로그래머스] 길 찾기 게임 (java) (0) | 2020.04.24 |
[프로그래머스 / 카카오] (틀림)호텔 방 배정 (0) | 2020.04.04 |
[프로그래머스 / 카카오] (틀림)크레인 인형뽑기 게임 (0) | 2020.04.04 |