문제접근
배열을 모두 돌아서 0의 개수와 일치하는 개수를 모두 더하면 최고 순위가 되고
일치하는 개수만 본다면 최저 개수가 됩니다.
for(int i = 0; i < 6; i ++){
//0의 갯수 알아내기
if(lottos[i] ==0){
high_num++;
}
for(int j =0; j < 6; j++){
//같은 수가 있다면
if(win_nums[i] == lottos[j]){
high_num++;
low_num++;
}
}
}
high_num에는 (0의 개수) + (일치하는 개수) 가 들어가고
low_num 에는 (일치하는 개수)만 들어갑니다.
여기서 주의해야할 것이
- 배열의 모든 수가 다른 수 일 때
ex)1,2,3,4,5,6 != 7,8,9,10,11,12 - 모든 수가 0일 때
ex)0,0,0,0,0,0
를 조심해야 합니다.
//맞는 것이 없다면 예외처리
if(low_num < 2){
low_num = 1;
}
if(high_num < 2){
high_num =1;
}
안 맞은 수 | 맞은 수 | 등수 |
0 | 6 | 1 |
1 | 5 | 2 |
2 | 4 | 3 |
3 | 3 | 4 |
4 | 2 | 5 |
5 | 1 | 6 |
맞은 수가 2개 이하라면 등수는 무조건 6등이 되어야 합니다.
int[] answer = {(6-high_num) + 1, (6-low_num) + 1};
이러한 식으로 answer를 반환해줍니다.
다른 사람의 풀이를 보니 놀라웠습니다.
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};
}
}
map을 이용해서 containsKey()로 맵에서 인자로 보낸 키가 있으면 true 없으면 false를 반환합니다.
여기에서는 0의 개수와 맞은 개수를 더하고 7로 빼면 등수가 나온다는 것을 이용했습니다.
그리고 1개 이하로 0이 있거나, 정답과 맞으면 6등으로 반환하는 것을 볼 수 있습니다.
728x90
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers / Java] 멀쩡한 사각형 (0) | 2022.05.07 |
---|---|
[Programmers / Python] 메뉴 리뉴얼 (0) | 2022.03.04 |
[Programmers / Python] 괄호변환 (0) | 2022.03.03 |
[Programmers / Python] 순위검색 (0) | 2022.03.02 |
[Programmers / Python] 비밀지도 (0) | 2022.02.26 |