본문 바로가기
개발/알고리즘

프로그래머스 : 모의고사 (자바스크립트)

by 안뇽! 2021. 10. 29.
반응형

 

처음에는 문제개수만큼 수포자1,수포자2,수포자3의 배열을 일일이 다 구했다.

다 풀 후에 다른사람들의 풀이를 보고 filter를 이용해 코드를 확 줄일 수 있다는 것을 알았다.

 

내 코드

function solution(answers) {
    let ansLength = answers.length
    let stu1 = []
    let stu2 = []
    let stu3 = []
    let k1 = 1
    let k2 = 1
    let k3 = [3,3,1,1,2,2,4,4,5,5]
    //문제 개수만큼 stu1,stu2,stu3의 개수도 같게함
    for(let i=0;i<ansLength;i++){
        if(k1===6)k1=1
        if(k2===2)k2++
        if(k2===6)k2=1
        stu1.push(k1)
        k1++
        if(i%2===0){
            stu2.push(2)
        }else{
            stu2.push(k2)
            k2++
        }
        
        stu3.push(k3[i%10])
        
    }
    
    let cnt1=[1,0]//[수포자1,맞춘문제수]
    let cnt2=[2,0]
    let cnt3=[3,0]
    answers.forEach((answer,i)=>{
        if(answer===stu1[i])cnt1[1]++//맞춘문제++
        if(answer===stu2[i])cnt2[1]++
        if(answer===stu3[i])cnt3[1]++
    })
    //filter쓰면 여기까지를 7줄로 줄일 수 있음
    
    
    let ans = []   
    const max = Math.max(cnt1[1],cnt2[1],cnt3[1])
    if(max===cnt1[1])ans.push(cnt1[0])
    if(max===cnt2[1])ans.push(cnt2[0])
    if(max===cnt3[1])ans.push(cnt3[0])
    
    return ans
}

다른사람 코드

function solution(answers) {
    var answer = [];
    var a1 = [1, 2, 3, 4, 5];
    var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
    var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

    var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
    var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
    var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
    var max = Math.max(a1c,a2c,a3c);

    if (a1c === max) {answer.push(1)};
    if (a2c === max) {answer.push(2)};
    if (a3c === max) {answer.push(3)};


    return answer;
}
반응형