프로그래머스 모의고사 (javascript)

이진우·2022년 7월 29일
0

문제

풀이

function solution(answers) {
    
    let one = [1, 2, 3, 4, 5];
    let two = [2, 1, 2, 3, 2, 4, 2, 5];
    let three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    
    let everyAnswer = [0,0,0];
    
    answers.map((value,index)=>{
        return one[index % one.length] === value && everyAnswer[0]++
    })
    answers.map((value,index)=>{
        return two[index % two.length] === value && everyAnswer[1]++
    })
    answers.map((value,index)=>{
        return three[index % three.length] === value && everyAnswer[2]++
    })
    
    let maxNum = Math.max(...everyAnswer)
    let answer = []
    
    for(let i=0; i<everyAnswer.length; i++){
        if (everyAnswer[i] == maxNum){
            answer.push(i+1)
        }
    }
    
    return(answer)
    
}

풀이방법

  1. 수포자들의 정답 패턴을 각각 배열에 담아준다.
  2. 정답을 맞춘 수를 담기위해 everyAnswer에 배열값 3개를 준비해주고 answers로 들어오는 배열을 map메소드를 통해 수포자들의 배열값을 비교해 정답이면 각각 배열에 ++를 시켜준다.
  3. 정답을 많이 맞춘 수치를 구하기 위해 Math.max를 사용해 변수에 담아서 준비한다
  4. for반복문으로 everyAnswer 길이만큼 반복을 해주는데 everyAnswer의 값이 maxNum과 같으면 가장많은 정답을 맞춘 사람이니 배열의 index값의 +1을 해서 answer에 정답자 번호를 넣어준다.(여러사람일 경우도 순차적으로 추가되기때문에 이방법을 사용)

풀이후기

처음에 결과로 오류가 엄청 나오길래 딱 든생각이 문제에보면 최대 10,000문제 라는 말이있는데 그러면 배열을 계속해서 루프를 시키면서 결과를 받아야하는데 내가 선언한 배열을 딱 정해져있어서 오류가 난다고 생각했고 분하지만 도저히 생각이 나질않아 이부분만 정답풀이를 보았는데 처음에 내생각에 반복문이나 다른 메소드들이 있을줄 알았는데 그게 아니였다...

코드에서보면 one[index % one.length] === value 이 부분에서
긴배열의 map에서index 랑 짧은 배열의 나머지값으로 일정패턴배열의 값을 계속 돌릴 수 있었다

이부분은 중요한 개념일 것 같아서 따로 글을 올려두려한다🤓

profile
초보개발자의 개발일기

0개의 댓글