[프로그래머스/Javascript] 34. 모의고사

현수·2022년 1월 19일
post-thumbnail

문제설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.


제한조건

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력예시

numbersreturn
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]

풀이

function solution(answers) {
    let n1 = [1,2,3,4,5]
    let n2 = [2,1,2,3,2,4,2,5]
    let n3 = [3,3,1,1,2,2,4,4,5,5]	// 수포자들의 정답 패턴
    let num = [[1, 0], [2, 0], [3, 0]]	// 2차원 배열 내의 각 수포자, 맞힌 개수 
    
    for(let i = 0; i < answers.length; i++){
        if(n1[i % n1.length] === answers[i]) num[0][1] += 1
        if(n2[i % n2.length] === answers[i]) num[1][1] += 1
        if(n3[i % n3.length] === answers[i]) num[2][1] += 1
    }	// 정답패턴과 정답을 대조해서 맞힌 개수 카운트
    
    let max = Math.max(num[0][1],num[1][1],num[2][1])
    let answer = []
    for(let spj of num){
        if (spj[1] === max) answer.push(spj[0])
    }
    
    return answer
}

설명

문제에 각 수포자들의 정답 패턴을 제시하고 있다. 이것을 각각 배열로 선언해두고, 수포자들의 번호와 맞은 문제를 카운팅하는 2차원 배열도 만든다. 그리고 반복문을 돌면서 패턴과 정답을 대조해 맞힌 개수를 카운트하고 가장 많이 카운팅된 수를 찾는다. 그 수와 같은 수포자의 이름을 반복문을 돌며 정답 배열에 .push()한다.

profile
언젠간 되겠지!

0개의 댓글