한 걸음씩

[프로그래머스][JS] 모의고사 ✅ 본문

Programmers

[프로그래머스][JS] 모의고사 ✅

winter17 2023. 7. 13. 12:05

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 과정

function solution(answers) {
    const pattern1 = [1, 2, 3, 4, 5]
    const pattern2 = [2, 1, 2, 3, 2, 4, 2, 5]
    const pattern3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    let score = [0, 0, 0] // pattern1, pattern2, pattern3 각 점수
    for (let i = 0; i < answers.length; i++){
    // pattern1, 2, 3은 나머지 연산을 통해 인덱스로 접근
    // 왜? pattern1, 2, 3의 패턴이 반복되니까 나머지 연산으로 접근해야 패턴을 반복적으로 사용 가능
        if (answers[i] === pattern1[i % pattern1.length ]){
            score[0]++
        }
        if (answers[i] === pattern2[i % pattern2.length ]){
            score[1]++
        }
        if (answers[i] === pattern3[i % pattern3.length ]){
            score[2]++
        }
    }
    const max = Math.max(...score) // 가장 큰 수

    // 가장 많은 문제를 맞힌 사람
    let winners = [] 
    for (let i = 0; i < score.length; i++){ 
        if (score[i] === max){ // 가장 큰 수와 score[i]가 일치하면 
            winners.push(i + 1) 
            // i + 1 : 1번, 2번, 3번 총 3명의 수포자니까 인덱스에 + 1을 하여 push
        }
    }
    return winners;
}

완전 탐색 문제이고 코드 설명은 주석을 참고하면 된다 ↑

 


리뷰

처음에 문제 이해가 안 됐는데 1번, 2번, 3번 수포자가 정답을 찍는 방식이 있고 거기서 패턴을 찾아 각 배열에 저장하고

answers배열은 정답인 배열이고 수포자의 배열과 answers배열을 맞췄을 때 수포자가 얼마나 많은 문제를 맞혔는지 찾는 문제이다.