[문제 이름 : 로또의 최고 순위와 최저 순위 (프로그래머스 77484, Lv 1)]
문제 url : https://school.programmers.co.kr/learn/courses/30/lessons/77484
내가 작성한 코드는 아래와 같다.
import java.util.*;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
HashMap<Integer, Integer> map = new HashMap<>();
for(int i=1; i<=6; i++) {
map.put(7-i, i);
}
int[] answer = new int[2];
int zeroCount = 0;
int minEqualCount = 0;
for(int i=0; i<lottos.length; i++) {
if(lottos[i] == 0) {
zeroCount++;
continue;
}
for(int j=0; j<win_nums.length; j++) {
if(lottos[i] == win_nums[j]) {
minEqualCount++;
break;
}
}
}
if(minEqualCount < 2) answer[1] = 6;
else {
answer[1] = map.get(minEqualCount);
}
if(zeroCount == 0) {
answer[0] = answer[1];
} else {
answer[0] = map.get(zeroCount + minEqualCount);
}
return answer;
}
}
[풀이 과정]
순위 당첨 내용
1 - 6개 번호가 모두 일치
2 - 5개 번호가 일치
3 - 4개 번호가 일치
4 - 3개 번호가 일치
5 - 2개 번호가 일치
6 - (낙첨) 그 외
1. 로또에 맞춘 개수로, 순위를 저장하므로 이를 Map에 저장한다.
2. lottos[] 배열을 순회하며, 0의 개수와, 일치하는 개수를 따로 세어준다.
3. 일치하는 개수가 2개 이하면, 낙첨이므로 순위6을 answer[1]에 저장해준다. 그렇지 않은 경우, Map에 저장해놓았던 값을 토대로 순위를 가져와 answer[1]에 저장한다.
4. 0의 개수가 없다면, answer[1]의 값을 그대로 answer[0]에 저장해주면 되고, 하나라도 있다면 일치하는 개수와 합산해서 Map에서 해당하는 순위를 찾아서 answer[0]에 저장해주면 된다.
문제 조건을 올바르게 이해했다면 LV 1인 만큼 쉽게 풀이할 수 있는 문제였다.
풀이 시간 : 20분