728x90

문제


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

 

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

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

programmers.co.kr

 

코드


function solution(answers) {
    let answer = [];

    let count = [0,0,0]; //몇개 맞춘지 count를 올릴 배열
    const one = [1,2,3,4,5];
    const two = [2,1,2,3,2,4,2,5];
    const three = [3,3,1,1,2,2,4,4,5,5];

    for (let i=0; i<answers.length; i++) {
        if (answers[i] === one[i % one.length]) count[0]++;
        if (answers[i] === two[i % two.length]) count[1]++;
        if (answers[i] === three[i % three.length]) count[2]++;
    }
    // "i%수포자.length"를 해주는 이유 : one, two, three, answers의 배열의 길이가 모두 다르기 때문에 index에 맞춰 값을 비교해야하기 때문
    const max = Math.max(count[0], count[1], count[2]);
    for (let i=0; i<count.length; i++) {
        if (count[i] === max) { //최대값의 수를 가진학생의 idx에 +1을 하여 answer에 삽입
            answer.push(i+1);
        }
    }

    return answer;
}

 

후기


  • 처음엔 각 수포자들이 맞춘 개수를 count 하기위해 따로 또 배열을 만들고 push를 하였는데 중복 코드가 너무 길어지고 지저분해보였다
  • 이를 해결하기 위해 맨 처음 count 할 배열을 만들어 [0,0,0]으로 초기화하고 각 idx 별로 count++을 해주니 아주 보기 좋았다
  • 처음엔 "i%수포자.length"를 왜 해주는지 너무 이해가 안갔다. 애초에 주어지는 answers의 길이가 5이기 때문에 그냥 "i"로만 비교를 하면 되지 않냐 하는 의문이 들었기 때문이다. 하지만 당연히 틀린 결과가 나왔고, 저걸 해줌으로써 반복되는 answers의 길이와 수포자 배열의 길이를 맞추기 위해서는 idx를 맞춰줘야 하는 작업이 필요하다는 것을 알았고, 그것을 해결하기 위해 "i%수포자.length"가 필요하단 것을 알았다

+ Recent posts