문제
프로그래머스 문제
내 풀이
function solution(lottos, win_nums) {
const ranks = [6, 6, 5, 4, 3, 2, 1];
const fixedCnt = lottos.reduce((acc, num, idx) => num > 0 && win_nums.includes(num) ? acc + 1 : acc, 0);
const zeroCnt = lottos.reduce((acc, num, idx) => num === 0 ? acc + 1 : acc, 0);
return [ranks[fixedCnt + zeroCnt], ranks[fixedCnt]];
}
개선점
- reduce를 이용해서 배열 안의 값들을 루프 두번 안 돌리고 계산한 방법이 신기하다.
function solution(lottos = [], win_nums = []) {
const rank = [6, 6, 5, 4, 3, 2, 1]
let [max, min] = lottos.reduce(([max, min], cur) => win_nums.includes(cur) ? [++max, ++min] : (cur === 0 ? [++max, min] : [max, min]), [0, 0])
return [rank[max], rank[min]];
};