programmers
[프로그래머스]Lv1. 로또의 최고 순위와 최저 순위 (javascript)
hee0
2022. 8. 12. 14:08
6자리의 로또의 번호 중 일부를 알아볼 수 없을 때, 최고순위 최저순위 구하기
등수
순위당첨 내용
1 | 6개 번호가 모두 일치 |
2 | 5개 번호가 일치 |
3 | 4개 번호가 일치 |
4 | 3개 번호가 일치 |
5 | 2개 번호가 일치 |
6(낙첨) | 그 외 |
제한사항
- lottos는 길이 6인 정수 배열입니다.
- lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
- 0은 알아볼 수 없는 숫자를 의미합니다.
- 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
- lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
- win_nums은 길이 6인 정수 배열입니다.
- win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
- win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
- win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.
나의 풀이
- 최대 범위 확인
- 로또 번호 모두 손실된 경우 또는 로또 번호 모두 존재하는 경우
- 모두 일치 또는 모두 불일치: 1등 ~ 6등
- 로또 번호 모두 손실된 경우 또는 로또 번호 모두 존재하는 경우
- 손실된 번호 갯수(zeros)와 일치하는 번호갯수(matches)를 출력
- 손실된 번호갯수가 6일 때: 최대 1등, 최소 6등
- 손실된 번호갯수가 0일 때: 번호갯수에 해당하는 등수가 당첨등수
- 등수는 1~6, 로또 수 또한 6개이기에 +1 값인 7 - matches 로 등수처리
- 그 외에 해당하는 경우는 switch문을 통해 처리
- if else 로도 표현가능하나, 조건에 충족할 때까지 모든 조건문을 실행
- switch는 해당 케이스에 대하여 바로 접근하기 때문에 비용이 훨씬 적음
- 결과는 최대순위, 최소순위 순으로 전달되어야 하기 때문에 answer.sort()하여 정렬
function solution(lottos, win_nums) {
// 1. 0 카운트와 당첨번호와 일치갯수 -> 최고,최저
// 2. 0 없으면 매칭수만큼
var answer = [1, 6];
const zeros = lottos.filter( lt => !lt).length;
const matches = lottos.filter( lt => win_nums.find( wn => lt === wn)).length;
if (zeros === 6) {
return [1, 6];
} else if (zeros === 0) {
const range = matches ? 7 - matches : 6;
return [range, range];
} else {
let min; let max;
switch(matches) {
case 5:
min = 2; max = 1;
break;
case 4:
min = 3; max = 3 - zeros;
break;
case 3:
min = 4; max = 4 - zeros;
break;
case 2:
min = 5; max = 5 - zeros;
break;
case 1:
min = 6; max = 6 - zeros;
break;
default:
min = 6; max = 1;
break;
}
return [min, max].sort();
}
return answer.sort();
}
결과