


나의 풀이
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2]; // 1
int result = 0;
int zero = 0;
for (int i = 0; i < lottos.length; i++) { // 2
if (lottos[i] == 0) {
zero++;
continue;
}
for (int j = 0; j < win_nums.length; j++) {
if (lottos[i] == win_nums[j]) {
result++;
break;
}
}
}
switch (result + zero) { // 3
case 2:
answer[0] = 5;
break;
case 3:
answer[0] = 4;
break;
case 4:
answer[0] = 3;
break;
case 5:
answer[0] = 2;
break;
case 6:
answer[0] = 1;
break;
default:
answer[0] = 6;
break;
}
switch (result) { // 4
case 2:
answer[1] = 5;
break;
case 3:
answer[1] = 4;
break;
case 4:
answer[1] = 3;
break;
case 5:
answer[1] = 2;
break;
case 6:
answer[1] = 1;
break;
default:
answer[1] = 6;
break;
}
return answer;
}
}
과정
- answer에는 최고 등수와 최저 등수만 들어가면 되니까 크기를 2로 만들고, 남은 숫자 중 맞은 숫자의 개수를 기록할 result와 0의 개수를 기록할 zero를 선언
- lottos와 win_nums를 순회하며 맞은 개수와 0의 개수를 찾는다
- 맞은 갯수와 0의 갯수를 합한 값이 최댓값이니 switch문으로 알맞은 등수를 찾아준다
- 맞은 갯수만 들어간 값이 최솟값이니 switch문으로 알맞은 등수를 찾아준다
다른 사람 풀이
import java.util.HashMap;
import java.util.Map;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
int zeroCount = 0;
for(int lotto : lottos) {
if(lotto == 0) {
zeroCount++;
continue;
}
map.put(lotto, true);
}
int sameCount = 0;
for(int winNum : win_nums) {
if(map.containsKey(winNum)) sameCount++;
}
int maxRank = 7 - (sameCount + zeroCount);
int minRank = 7 - sameCount;
if(maxRank > 6) maxRank = 6;
if(minRank > 6) minRank = 6;
return new int[] {maxRank, minRank};
}
}