function solution(lottos, win_nums) {
let rank = {6: 1, 5: 2, 4: 3, 3: 4, 2: 5, 1: 6}
let max = 0;
let min = 0;
let zero = 0;
let result = [];
for(let i = 0; i < lottos.length; i++) {
if(lottos[i] === 0) {
zero++
continue
}
for(let j = 0; j < win_nums.length; j++) {
if(lottos[i] === win_nums[j]) {
max++
min++
}
}
}
let maxSum = max + zero
if(maxSum >= 6) {
maxSum = rank["6"]
} else if(maxSum <= 1) {
maxSum = rank["1"]
} else {
maxSum = rank[maxSum]
}
if(min >= 6) {
min = rank["6"]
} else if(min <= 1) {
min = rank["1"]
} else {
min = rank[min]
}
return [maxSum, min]
}
알고리즘 설명란이 너무 길어서 당황스러웠지만, 다 읽어보니 로직은 상당히 간단한 알고리즘이다.
코드를 구현하면서 점점 길어질수록 느꼈다.
"와나.. 이거 분명 이렇게 길게 안나올 알고리즘일텐데.."
중첩 반복문에 조건문 중복으로 쓰이면서 너무 지저분하지만, 알고리즘이 풀리긴 풀렸다.
function solution(lottos, win_nums) {
const rank = [6, 6, 5, 4, 3, 2, 1];
let minCount = lottos.filter(v => win_nums.includes(v)).length;
let zeroCount = lottos.filter(v => !v).length;
const maxCount = minCount + zeroCount;
return [rank[maxCount], rank[minCount]];
}
모범답안 보자마자 "와 진짜 쉽게 푸셨네" 라는 말이 나왔다.
생각해보니 최저순위 갯수와 지워진 로또 번호 0을 합치면 최고 순위 갯수인데
해당 수식을 생각치 못하였다.