완전탐색_누가 더 잘찍을까?

Feb 24th 2020 by jyoon

문제

  • 학생 3명이 있고 각각 찍는 방법이 각각 다르고 그중 누가 제일 잘찍는지 확인하는 문제

해결 방법

  • 학생3명 찍는 방법 배열과 정답 리스트를 비교하면서 학생마다 맞힌 정답 배열길이를 새로운 배열에 push
  • 그 결과를 Math.max함수를 사용 제일 큰수(제일 많이 맞힌갯수) 구한다.
  • 위 두정보를 가지고 제일 많이 맞힌 학생을 구한다.

STEP

  • STEP1: 학생별 찍어서 맞은 정답 arr
  • STEP2: Math.max
  • STEP3: map, filter 함수를 적절하게 사용하여 제일 잘 찍은 학생을 구한다.

CODE

function solution(answerList) {
  let answer = []

  const stdPick1 = [1, 2, 3, 4, 5]
  const stdPick2 = [2, 1, 2, 3, 2, 4, 2, 5]
  const stdPick3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

  //STEP1
  let std1Result = answerList.filter(
    (v, i) => v === stdPick1[i % stdPick1.length]
  )
  let std2Result = answerList.filter(
    (v, i) => v === stdPick2[i % stdPick2.length]
  )
  let std3Result = answerList.filter(
    (v, i) => v === stdPick3[i % stdPick3.length]
  )

  const stdResult = []
  stdResult.push(std1Result.length)
  stdResult.push(std2Result.length)
  stdResult.push(std3Result.length)

  //STEP2
  const maxValue = Math.max(...stdResult)
  if (maxValue === 0) {
    answer = [0, 0, 0]
  } else {
    //STEP3
    answer = stdResult
      .map((v, i) => {
        return { std: i + 1, score: v }
      })
      .filter(v => v.score === maxValue)
      .map(v => v.std)
      .sort()
  }

  return answer
}

console.log(solution([1, 2, 3, 4, 5]))
console.log(solution([1, 3, 2, 4, 2]))
console.log(
  solution([3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5])
)

정답

[1][1,2,3] [3]