Algorithm/프로그래머스
[프로그래머스] - 로또의 최고 순위와 최저 순위
JunGi Jeong
2021. 7. 21. 13:30
https://programmers.co.kr/learn/courses/30/lessons/77484
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
/*
1. 0 분리 -> 2개 배열 space complexity
2. sort each int arrays
3. check
3-1 lottos[i] == win_nums[0] cnt++
3-2 lottos[i] < win_nums[0] -> win_nums[1]...
3-3 lottos[i] > win_nums[0] -> i++
4. cnt -> 최소 cnt+ 0개수 -> 최대
*/
// #1
int zeroCnt = 0;
int winCnt = 0;
ArrayList<Integer> seperateLottos = new ArrayList<Integer>();
for(int temp : lottos) {
if(temp == 0){
zeroCnt++;
}else{
seperateLottos.add(temp);
}
}
// #2
Collections.sort(seperateLottos);
Arrays.sort(win_nums);
// #3
for(int temp : seperateLottos){
for(int idx = 0; idx < 6; idx++) {
if(temp == win_nums[idx]) winCnt++;
else if(temp > win_nums[idx]) continue;
}
}
int minimum = 0;
int maximum = 0;
int[] guideNumber = {6, 5, 4, 3, 2, 1, 0};
// #4
for(int idx = 0; idx < guideNumber.length; idx++){
if(guideNumber[idx] == winCnt) {
minimum = idx + 1;
break;
}
}
if(minimum > 6) minimum = 6;
maximum = minimum - zeroCnt;
if(maximum < 1) maximum = 1;
int[] answer = {maximum, minimum};
return answer;
}
}