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]