두 배열을 비교하는 매우 전형적인 문제이다. for문 2개를 연결하여 풀 수도 있겠지만, hash를 이용해 O(n)으로 해결해 보겠습니다.
function solution(lottos, win_nums) {
const nonZeroLottos = lottos.filter((lotto) => lotto !== 0)
const win_numsObj = Object.fromEntries(win_nums.map((e) => [e, 0]))
const zeroNum = lottos.length - nonZeroLottos.length
const rankObj = {
6: 1,
5: 2,
4: 3,
3: 4,
2: 5,
1: 6,
0: 6,
}
nonZeroLottos.forEach((e) => {
if (win_numsObj[String(e)] === 0) win_numsObj[String(e)] = 1
})
// 0제외 맞힌 수
const firstSum = Object.entries(win_numsObj).reduce((acc, curr) => {
acc += curr[1]
return acc
}, 0)
const best = firstSum + zeroNum
const worst = firstSum
const answer = [rankObj[best], rankObj[worst]]
return answer
}
O(n^2) 가 나타나는 시점에 hash 자료구조를 고려하는게 필요합니다.