import java.util.Arrays;
public class LottoRanking {
public static void main(String[] args) {
LottoRanking l = new LottoRanking();
int[] lottos = {44, 1, 0, 0, 31, 25};
int[] win_nums = {31, 10, 45, 1, 6, 19};
int[] solution = l.solution(lottos, win_nums);
for (int i : solution) {
System.out.println("i = " + i);
}
}
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2];
//두 배열을 비교하여 몇개가 맞았는지
//두 배열을 비교할때 이진 탐색으로 탐색
int right = 0;
int unknown = 0;
//이진 탐색을 위해 미리 정렬
Arrays.sort(win_nums);
for(int l : lottos){
int result = binarySearch(win_nums, l);
if(result>0){
right++;
}else if(result==0){
unknown++;
}
}
//최고
answer[0] = rank(right+unknown);
//최저
answer[1] = rank(right);
return answer;
}
private int binarySearch(int[] win_nums, int key){
if(key==0){
return 0;
}
int res = -1;
int mid;
int left = 0;
int right = win_nums.length - 1;
while (right >= left) {
mid = (right + left) / 2;
if (key == win_nums[mid]) {
return 1;
}
if (key < win_nums[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return res;
}
private int rank(int right){
if(right == 6){
return 1;
}else if(right == 5){
return 2;
}else if(right == 4){
return 3;
}else if(right == 3){
return 4;
}else if(right == 2){
return 5;
}
return 6;
}
}
이진 탐색을 써보고 싶었는데 사용할 문제가 딱 나왔다. 그래서 이진 탐색으로 풀었지만... 다른 풀이를 보니까 그냥 이중 for문 돌리니까 풀리는 문제긴 하더라..ㅎㅎ 그래도 걸리는 시간도 모두 1ms 안으로 풀리니깐 뭐... 그리고 또 아쉬웠던 점은 rank를 결정할때 if로 풀었다는거다... 제발 switch 좀 쓰세요...ㅎㅎ 그래도 어려울 줄 알았는데 생각보다 쉽게 풀었던 문제였다.