[프로그래머스/LV1/자바스크립트] 모의고사

2023. 6. 14. 12:18

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42840?language=javascript 

 

프로그래머스

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

programmers.co.kr


코드

function solution(answers) {
    var supo1 = [1, 2, 3, 4, 5];
    var supo2 = [2, 1, 2, 3, 2, 4, 2, 5];
    var supo3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

    var check = [0, 0, 0];
    for (var i = 0; i < answers.length; i++) {
        if (answers[i] === supo1[i % 5]) {
            check[0] += 1;
        }
        if (answers[i] === supo2[i % 8]) {
            check[1] += 1;
        }
        if (answers[i] === supo3[i % 10]) {
            check[2] += 1;
        }
    }

    var answer = check.map((item, idx) => { 
        if(item === Math.max(...check)) return idx + 1;
        else return -1;
    }).filter((el) => el !== -1);

    return answer;
}

메모

각 수포자들의 정답을 맞춘 개수를 담아놓은 check 배열에서 가장 많은 문제를 맞춘 수포자를 찾아낼 때

map함수와 filter함수를 사용했다.

map함수를 통해 우선 check 배열에서 가장 큰 값과 같은 값을 가지는 인덱스들을 걸러내고, 그렇지 않다면 -1로 바꾼다.

이때 배열의 인덱스와 수포자를 구분할 때 1의 차이가 생기기 때문에 1을 더해줬다.

(ex. [1, 3, 3] => [-1, 2, 3])

그리고 filter함수를 사용해서 -1이 아닌 값만 걸러내준다.

(ex. [-1, 2, 3] => [2, 3])

인덱스를 사용해 문제를 풀었기 때문에 오름차순으로 정렬해줄 필요는 없다.

 

BELATED ARTICLES

more