Development/알고리즘

[프로그래머스 | Javascript] Lv.1 모의고사

레오나르도 다빈츠 2024. 11. 25. 22:53

 

// answer 1
const 정답패턴 = {
  1: [1, 2, 3, 4, 5],
  2: [2, 1, 2, 3, 2, 4, 2, 5],
  3: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
}

function solution(answers) {
  const 학생별정답을찍는패턴 = {}
  const 학생별정답의수 = {}

  const 정답 = new Array(answers.length).fill().map((_, index) => answers[index % answers.length])
  Object.values(정답패턴).forEach((array, index) => {
    학생별정답을찍는패턴[index + 1] = new Array(answers.length).fill().map((_, index) => array[index % array.length])
  })

  Object.values(학생별정답을찍는패턴).forEach((array, i) => {
    array.forEach((학생이찍은정답, j) => {
      if (정답[j] === 학생이찍은정답) {
        if (!학생별정답의수[i + 1]) 학생별정답의수[i + 1] = 0
        학생별정답의수[i + 1] += 1
      }
    })
  })

  const result = []
  for (const [key, value] of Object.entries(학생별정답의수)) {
    if (Math.max(...Object.values(학생별정답의수)) === value) result.push(Number(key))
  }

  return result
}

// answer 2
const 정답패턴 = {
  1: [1, 2, 3, 4, 5],
  2: [2, 1, 2, 3, 2, 4, 2, 5],
  3: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
}

function solution(answers) {
  const 학생별정답의수 = {}

  // 각 학생의 정답 패턴을 정답 길이에 맞게 반복시키며 비교
  Object.entries(정답패턴).forEach(([학생, 패턴]) => {
    const correctCount = answers.filter((answer, index) => answer === 패턴[index % 패턴.length]).length
    학생별정답의수[학생] = correctCount
  })

  // 최고 점수를 받은 학생들 반환
  const maxScore = Math.max(...Object.values(학생별정답의수))
  return Object.entries(학생별정답의수)
    .filter(([_, score]) => score === maxScore)
    .map(([학생]) => Number(학생))
}

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