programmers.co.kr/learn/courses/30/lessons/77484
최고는 알아볼 수 없게 된 수가 모두 유효한 경우이고
최저는 알아 볼 수 없게 된 수가 모두 유효하지 않은 경우 이므로
lottos와 win_num의 같은 수의 개수 구하고
lottos에 알아볼 수 없게 된 숫자의 수의 개수를 구하여서
최고는 두 개수의 합
최저는 같은 경우의 개수로 등수를 구하면 된다.
ps
로또의 범위가 45까지이므로 시간 복잡도에 민감하게 풀지않아도 되지만
같은 수의 개수를 구할때 이중 for문을 사용하는 것 보다
boolean 배열을 만들어서 처리하는 것이 시간복잡도면에서 더 좋은 코드이다.
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int zeroCount = 0;
int sameCount = 0;
boolean[] num_counts = new boolean[46];
// 45 중 당첨 번호에 포함되는 경우 true로 설정
for(int i = 0; i < win_nums.length; i++) {
num_counts[win_nums[i]] = true;
}
// 구매한 로또 번호를 순회
for(int i = 0; i < lottos.length; i ++) {
// 지어진 경우
if(lottos[i] == 0) {
zeroCount++;
continue;
}
// 로또 번호와 당첨번호와 같은 경우
if(num_counts[lottos[i]]) {
num_counts[lottos[i]] = false;
sameCount++;
}
}
int[] answer = {getRank(zeroCount+sameCount), getRank(sameCount)};
return answer;
}
// 맞은 갯수에 따른 순위 리턴 메서드
static int getRank(int count) {
if(count == 0) return 6;
return 7 - count;
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 폰켓몬 문제 (자바) (0) | 2021.04.30 |
---|---|
프로그래머스 - 다단계 칫솔 판매 문제 (자바) (1) | 2021.04.29 |
프로그래머스 - 행렬 테두리 회전하기 문제 (자바) (0) | 2021.04.27 |
프로그래머스 - 헤비 유저가 소유한 장소 (SQL) (0) | 2021.04.27 |
프로그래머스 - 점프와 순간 이동 문제 (자바) (0) | 2021.04.24 |