문제: https://programmers.co.kr/learn/courses/30/lessons/77484
1.최저갯수 : filter를 사용해 lotto배열 중 win배열과 일치하는 요소의 갯수를 구한다.
2.최고갯수 : lotto배열 중 0의 갯수를 구하고, 최저갯수를 더함.
3.등수 출력: rank배열에서 해당 갯수에 상응하는 요소의 인덱스값을 등수로 받음.
(인덱스값이 없어서 -1이 나오면, 6으로 출력하기)
function solution(lotto, win) {
const minMatched = lotto.filter((el) => win.some((winEl) => winEl === el)).length;
const maxMatched = lotto.filter((el) => el === 0).length + minMatched;
const rank = ['', 6, 5, 4, 3, 2];
return [
rank.indexOf(maxMatched) === -1 ? 6 : rank.indexOf(maxMatched),
rank.indexOf(minMatched) === -1 ? 6 : rank.indexOf(minMatched),
];
}
console.log(solution([44, 1, 31, 25, 0, 0], [31, 10, 45, 1, 6, 19])); // [3,5]
//방법1 - filter, includes 이용
function solution(lottos, win) {
let rank = [6,6,5,4,3,2,1];
let min = lottos.filter(el=>win.includes(el)).length;
let zero = lottos.filter(el=>!el).length; //[0,0] //2
return [rank[min+zero],rank[min]];
}
console.log(solution([44, 1, 0, 0, 31, 25],[31, 10, 45, 1, 6, 19])); //[3,5]
//방법2(원초적인 방법) - for of, includes, switch 이용
function solution(lottos, win_nums) {
let answer = [];
let max = 0;
let min = 0;
for (let lotto of lottos) {
if (win_nums.includes(lotto)) {
min++;
}
if (lotto === 0) {
max++;
}
}
switch (min + max) {
case 6:
answer.push(1);
break;
case 5:
answer.push(2);
break;
case 4:
answer.push(3);
break;
case 3:
answer.push(4);
break;
case 2:
answer.push(5);
break;
default:
answer.push(6);
break;
}
switch (min) {
case 6:
answer.push(1);
break;
case 5:
answer.push(2);
break;
case 4:
answer.push(3);
break;
case 3:
answer.push(4);
break;
case 2:
answer.push(5);
break;
default:
answer.push(6);
break;
}
return answer;
}
console.log(solution([44, 1, 0, 0, 31, 25],[31, 10, 45, 1, 6, 19])); //[3,5]
console.log(!0); // true
console.log(!3); // false