프로그래머스 문제풀이: 모의고사(Javascript) ft. 수포자들

너겟·2022년 6월 4일
0
post-thumbnail

모의고사

수포자들이 수학문제를 찍을건데 그중에 몇개 맞는지 찾는 문제이다.
문제 풀러가기

문제 설명

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 함수를 작성해주세요.

입출력 예 설명
입출력 예 #1

수포자 1은 모든 문제를 맞혔습니다.
수포자 2는 모든 문제를 틀렸습니다.
수포자 3은 모든 문제를 틀렸습니다.
따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

문제풀이

  1. 수포자들이 제출한 답안 리스트 구하기
  • 수포자들은 문제를 찍는 패턴이 각각 다르고 패턴의 길이도 다르다.
  • answer의 길이보단 길어야 대조해볼 수 있다. -> answer.length 값을 이용한다.
  1. array 내에 있는 괄호를 없애주는 매서드 -> arr.flat()
  2. count array를 만들어서 forEach로 각 문제에 대한 답을 대조해서 채점해보고 맞는 사람은 해당 count index에 1씩 더해준다.
  3. 맞춘 갯수의 max값을 구할건데, 여기서 중복가능이라서 중복 찾아준다.
function solution(answers) {
    let first = [1,2,3,4,5]
    let second = [2,1,2,3,2,4,2,5]
    let third = [3,3,1,1,2,2,4,4,5,5]
    
    let length = Math.ceil((answers.length)/5); 
    
    let array1=  Array(length).fill(first).flat()
    let array2=  Array(length).fill(second).flat()
    let array3=  Array(length).fill(third).flat()
    
    const count = [0,0,0]
    
    answers.forEach ((el,i) => {
        if (el === array1[i]) {
            count[0] ++
        }
        if (el === array2[i]) {
            count[1] ++
        }
        if (el === array3[i]) {
            count[2] ++
        }
        
    })
    
    let result = []
    count.forEach((el, i)=> {
       if(el === Math.max(...count)) {
           result.push(i+1)
       }
    })
    
    return result
    
    //count.indexOf(Math.max(...count)) + 1  (중복이 없을 때)

}
profile
꾸준하게 하는 법을 배우는 중입니다!

0개의 댓글