楽透の最高と最低ランキング


問題の意図.


2つの配列の典型的な問題を比較した.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)が現れる場合,ハッシュデータ構造を考慮する必要がある.