로또의 최고 순위와 최저 순위

Cramming An·2022년 3월 31일
0

Code Interview

목록 보기
10/11
post-thumbnail

문제의도

두 배열을 비교하는 매우 전형적인 문제이다. 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 자료구조를 고려하는게 필요합니다.

profile
La Dolce Vita🥂

0개의 댓글