로또를 구매한 민우는 당첨 번호 발표일을 학수고대하고 있었습니다. 하지만, 민우의 동생이 로또에 낙서를 하여, 일부 번호를 알아볼 수 없게 되었습니다. 당첨 번호 발표 후, 민우는 자신이 구매했던 로또로 당첨이 가능했던 최고 순위와 최저 순위를 알아보고 싶어 졌습니다.
알아볼 수 없는 번호를 0으로 표기하기로 하고 가능한 최고순위, 최저순위구하기.
입출력 예
lottos = [44, 1, 0, 0, 31, 25]
win_nums =[31, 10, 45, 1, 6, 19]
result =[3, 5]
순위 당첨 내용
1 6개 번호가 모두 일치
2 5개 번호가 일치
3 4개 번호가 일치
4 3개 번호가 일치
5 2개 번호가 일치
6(낙첨) 그 외
0의 갯수 구하기
일치하는 갯수 구하기
높은순위 = 7 - 일치하는 갯수 - 0의 갯수
낮은순위 = 7 -일치하는 갯수
코드를 짜고나서 확인해보니 test case 중 하나에서 계속 에러가 났다
확인해보니 예외처리를 제대로 해주지 않았다는 것을 발견했다
왜냐하면 하나도 일치하지 않는경우 7으로 등록 되기 때문이었다!!
낮은순위에는 예외처리를 해주었지만 높은순위를 간과했다.
function solution(lottos, win_nums) {
var answer = [];
let match = 0;
let zero = 0;
for (let x of lottos) {
if (x === 0) zero++;
else if (win_nums.includes(x)) match++;
}
answer.push(7 - match - zero === 7 ? 6 : 7 - match - zero);
answer.push(7 - match === 7 ? 6 : 7 - match);
return answer;
}
- 등수를 array로 정의하고
- rank=[6,6,5,4,3,2,1] : 6이 두개인 경우는 0개,1개 맞추는 두가지 모두 6등이기 때문이다
- 맞추는 최소갯수와 최대갯수를 인덱스로 이용하는 방법이다
function solution(lottos, win_nums) {
const answer = [];
const rank = [6, 6, 5, 4, 3, 2, 1];
let match = 0;
let zeroCount = 0;
for (let x of lottos) {
if (win_nums.indexOf(x) > -1) match++;
else if (x === 0) zeroCount++;
}
const min = match;
const max = min + zeroCount;
answer.push(rank[max]);
answer.push(rank[min]);
return answer;
}