알고리즘, 자료구조/프로그래머스

[프로그래머스/완전탐색/javascript] 모의고사 코드 및 설명

soohkang 2021. 4. 5. 16:21
728x90

다른 분 코드 보면서 이해하고 배운 내용을 작성해보자.

 

 

문제

 

 

정답 처리된 코드

function solution(answers) {
    let pattern = [
        [1,2,3,4,5],
        [2,1,2,3,2,4,2,5],
        [3,3,1,1,2,2,4,4,5,5]
    ];
    let count = [0, 0, 0];
    for(let i in answers){
        if(pattern[0][i%5] === answers[i]){
            count[0]++;
        }
        if(pattern[1][i%8] === answers[i]){
            count[1]++;
        }
        if(pattern[2][i%10] === answers[i]){
            count[2]++;
        }
    }
    let max = Math.max(...count);   
    let answer=[];
    for(let x in count){
        if(count[x] === max){
            answer.push(Number(x)+1);
        }
    }
    
    return answer;
}

 

 

문제 이해

1) pattern 변수에 수포자 3명이 찍은 답을 할당한다.

2) 정답이 든 answers 배열과 수포자 3명의 찍은 답 배열을 비교하여 답을 맞힌 수포자의 수를 확인하기 위해 count 변수를 만든다.

3) 정답이 든 answers 배열의 길이만큼 정답과 수포자들의 답을 비교한다.

4) 정답 answers 길이와 수포자 각각의 찍은 답은 길이가 다르고, answers 길이가 수포자가 찍은 답의 길이보다 길 때를 생각하여 pattern 인덱스를 작성해야 한다. ( i % 수포자 찍은 답 길이 ) 

이해가 잘 안되서 answers = [1, 3, 2, 4, 2, 1, 2, 3]; 값으로하여 생각해보았다.

5) 정답과 수포자가 찍은 답이 같을 때 count를 1씩 증가시켜서 count에서 가장 큰 값을 찾는다.

6) count 에서 가장 큰 값을 찾은 뒤 for 문으로 count 배열과 max 값을 비교해서 answer에 push 하여 리턴한다.

 

 

출처: programmers.co.kr/learn/courses/30/lessons/42840?language=javascript

 

코딩테스트 연습 - 모의고사

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

programmers.co.kr