이번에 풀어본 문제는
프로그래머스 로또의 최고 순위와 최저 순위 입니다.
import java.util.*;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
//맞춘 개수에 따른 점수 idx = 맞춘개수, val = 순위
int [] rank = {6,6,5,4,3,2,1};
//당첨 번호
boolean [] winNum = new boolean[46];
for(int n : win_nums) winNum[n] = true;
int correctCnt = 0;
int zeroCnt = 0;
for(int n : lottos)
{
if(n == 0) zeroCnt++;
else if(winNum[n]) correctCnt++;
}
//최소는 직접 맞춘 개수
int min = correctCnt;
//최대는 가려진 수가 모두 당첨번호일때
int max = correctCnt + zeroCnt;
return new int[] {rank[max],rank[min]};
}
}
0으로 가려진 숫자를 사용하여 만들 수 있는 등수의 최소, 최댓값을 구하는 문제입니다.
최소는 현재 확인할 수 있는 맞춘 숫자를 제외하고 다 틀린 경우일 것이고,
최대는 0으로 가려진 숫자가 모두 당첨숫자일 경우일 것입니다.
따라서 0의 갯수와 맞은 당첨번호의 갯수만 파악한다면, 쉽게 해결할 수 있습니다.
편의상 맞춘 개수에 따른 등수를 미리 rank 배열로 만들어 놓고, 0의 개수와 맞춘 개수를 통해 결과를 도출해낼 수 있습니다.
로또라는 스토리가 주어져서 재밌게 풀었던 것 같습니다! ^~^
나도 당첨되고싶다....