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

Derhon·2023년 1월 17일
0

문제풀이

목록 보기
8/13
post-thumbnail

모의고사

나의 답

function solution(answers) {
    let answer = [];
    const p1 = [1,2,3,4,5];
    const p2 = [2,1,2,3,2,4,2,5];
    const p3 = [3,3,1,1,2,2,4,4,5,5];
    
    let p1a = 0;
    let p2a = 0;
    let p3a = 0;
    
    answers.forEach((a, index) => {
        if(a === p1[index%p1.length]) p1a++;
        if(a === p2[index%p2.length]) p2a++;
        if(a === p3[index%p3.length]) p3a++;
    })
    
    let result  = [{
        key: 1,
        value: p1a
    }, {
        key: 2,
        value: p2a
    }, {
        key: 3,
        value: p3a
    }]
    
    result.sort((a, b) => {
        return b.value - a.value;
    });
    
    if(result[0].value === result[1].value && result[1].value !== result[2].value){
        answer.push(result[0].key);
        answer.push(result[1].key);
    }else if(result[0].value === result[1].value && result[1].value === result[2].value){
        answer.push(result[0].key);
        answer.push(result[1].key);
        answer.push(result[2].key);
    }else{
        answer.push(result[0].key);
    }
    
    return answer;
}

정답이긴 하지만, 코드가 너무 길다.
다른 답을 찾아보면서 조금 수정해보았다.

개선된 답

오 답안을 찾아보면서 느낀건데, 내가 작성한 답안의 경우 불필요한 반복은 없다!
때문에 점수를 정렬하고 담는 과정만 수정하면 될 듯 싶다.

function solution(answers) {
    let answer = [];
    const p1 = [1,2,3,4,5];
    const p2 = [2,1,2,3,2,4,2,5];
    const p3 = [3,3,1,1,2,2,4,4,5,5];
    
    let p1a = 0;
    let p2a = 0;
    let p3a = 0;
    
    answers.forEach((a, index) => {
        if(a === p1[index%p1.length]) p1a++;
        if(a === p2[index%p2.length]) p2a++;
        if(a === p3[index%p3.length]) p3a++;
    })

    const scores = [p1a, p2a, p3a];    
    const max = Math.max(...scores);
    
    for(let i = 0; i < 3; i ++){
        if (max === scores[i]) answer.push(i + 1);
    }
    
    return answer;
}

코드 길이는 확실하게 개선됐다.
하지만 성능이 딱히 크게 개선된 것 같진 않다.
brute force라 그런듯

profile
🧑‍🚀 이사했어요 ⮕ https://99uulog.tistory.com/

0개의 댓글