Lv.1 : 모의고사 [JavaScript]

2024. 11. 7. 22:50Algorithm/프로그래머스

반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 풀이 1

function solution(answers) {
    var answer = [];
    var ans1 = [1, 2, 3, 4, 5];
    var ans2 = [2, 1, 2, 3, 2, 4, 2, 5];
    var ans3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    
    var cnt = [answers.filter((e, idx) => e == ans1[idx % ans1.length]).length,
               answers.filter((e, idx) => e == ans2[idx % ans2.length]).length,
               answers.filter((e, idx) => e == ans3[idx % ans3.length]).length]
    var maxCnt = Math.max(...cnt);
    
    for(var i = 1; i <= 3; i++){
        if(cnt[i - 1] == maxCnt) answer.push(i);
    }
    
    return answer;
}

수포자 1,2,3의 정답배열을 각각 만들어서

answers를 돌며 정답에 해당하는 것만 filter로 거른 뒤 그 길이가 수포자n의 점수이다.

가장 높은 점수인 maxCnt를 찾아, 가장 높은 점수를 받은 사람이 여럿일 경우를 확인한다

문제 풀이 2

function solution(answers) {
    var answer = [];
    var ans1 = [1, 2, 3, 4, 5];
    var ans2 = [2, 1, 2, 3, 2, 4, 2, 5];
    var ans3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    
    var cnt = [0, 0, 0];
    for(var i = 0; i <= answers.length; i++){
        if(answers[i] == ans1[i % ans1.length]) cnt[0]++;
        if(answers[i] == ans2[i % ans2.length]) cnt[1]++;
        if(answers[i] == ans3[i % ans3.length]) cnt[2]++;
    }
    
    var maxCnt = Math.max(...cnt);
    
    for(var i = 1; i <= 3; i++){
        if(cnt[i - 1] == maxCnt) answer.push(i);
    }
    
    return answer;
}

필터를 세 번 사용하는 게 성능적으로 좋지 않아

반복문 하나에서 세 명의 정답을 모두 처리할 수 있도록 수정

반응형

'Algorithm > 프로그래머스' 카테고리의 다른 글

Lv.1 : 과일장수 [JavaScript]  (0) 2024.11.10
Lv.2 : 튜플 [JavaScript]  (0) 2024.11.10
Lv.2 : 의상 [JavaScript]  (0) 2024.11.06
Lv.2 : 프로세스 [JavaScript]  (0) 2024.11.03
Lv.2 : [1차] 캐시 [JavaScript]  (0) 2024.11.02