문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/42840
함수설명
1,2, 그리고 3번 총 3명의 학생들이 답안을 찍는 방식이 보기에 주어져있습니다.
답안지 answer을 입력받아 세 학생들의 시험지를 채점한 후,
최고점을 받은 학생들의 번호를 담은 배열을 반환여야 합니다.
정답코드
//찍는 주기에 맞게 채점하여 점수를 반환
const scorePaper = (studentStyle, answers) => {
const range = studentStyle.length;
const scoredTestPaper = answers.filter((answer, index) => answer === studentStyle [index % range]);
const score = scoredTestPaper.length
return score
}
//학생들의 점수중 최고점 반환
const calculateHighScore = (arr) => {
return Math.max(... arr)
}
//최고점 획득자 번호를 가진 배열을 반환
const selectHighscoreAchievers = (scores, highScore) => {
const achievers = scores.reduce((acc, cur, index) => {
if(cur === highScore) {
acc = [... acc, index + 1];
}
return acc
}, []);
return achievers
}
const solution = (answers) => {
const studentPickStyles = [
[1, 2, 3, 4, 5],
[2, 1, 2, 3, 2, 4, 2, 5],
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
];
const scores = studentPickStyles.map((student) => scorePaper(student, answers));
const highScore = calculateHighScore(scores);
const highScoreAchievers = selectHighscoreAchievers(scores, highScore);
return highScoreAchievers;
}
고민
scorePaper의
책임에 대한 고민- 한 장만 채점/ 모든 학생의 답안을 채점?
- 한장만 채점하기로 결정했습니다
- 한 장만 채점/ 모든 학생의 답안을 채점?
scorePaper
를 반복호출하는 순회문을 어떻게 깔끔하게 작성할까studentPickStyles
는 solution 함수 본체에 넣어주고map
메서드를 사용scores
배열을 얻는 loop를 배열 메서드로 변경
쉬운 문제도 분해해보려 하니까 고민 포인트가 많이 생기는 거 같습니다.