코딩테스트/완전탐색

자바스크립트: 프로그래머스 lv1 모의고사

cantor 2023. 8. 16. 12:37

문제링크

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를 배열 메서드로 변경

쉬운 문제도 분해해보려 하니까 고민 포인트가 많이 생기는 거 같습니다.