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

박기영·2022년 9월 13일
0

프로그래머스

목록 보기
40/159
post-custom-banner

solution

function solution(answers) {    
    let soopo = {
        1 : [1, 2, 3, 4, 5],
        2 : [2, 1, 2, 3, 2, 4, 2, 5],
        3 : [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
    };
    
    // 순서대로 수포자 1,2,3의 점수를 의미
    let score = [0, 0, 0];
    
    for(let i = 1; i <= 3; i++){
        let num = answers.length / soopo[i].length;
        
        // repeat() 메서드는 내부 값이 알아서 정수형으로 바뀐다.
        // 정답과 비교를 위해 최소한 answers 길이만큼은 늘려준다.
        soopo[i] = soopo[i].join("").repeat(num + 1).split("").map((item) => Number(item));
        
        answers.forEach((item, index) => {
            if(soopo[i][index] === item){
                // score는 0번 인덱스가 1번 수포자이기 때문에 인덱스를 조절해줘야한다.
                score[i - 1] += 1;   
            }
        })
    }
    
    // 가장 많이 맞은 점수를 찾는다
    let max = Math.max(...score);
    
    let ans = [];
    
    // max가 중복되는 사람이 있으면 그 사람들을 ans에 넣어준다
    score.forEach((item, index) => {
        if(item === max){
            ans.push(index + 1);
        }
    })
    
    return ans;
}

수포자 번호에 따라 배열을 하나씩 만드는 방법은 for문 내부에서 사용하기 어려워서
하나의 객체에 모든 수포자의 정보를 넣어놨다.
answers와 수포자의 답안을 비교하기 위해서 수포자의 답안을 answers의 길이보다 크게 만들어줬는데,
아마 이 부분에서 시간 소요가 꽤 된 것 같다.

다른 분 풀이

function solution(answers) {
    var answer = [];
    const man1 = [1, 2, 3, 4, 5];
    const man2 = [2, 1, 2, 3, 2, 4, 2, 5];
    const man3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    let count = [0, 0, 0];

    for(let i = 0; i < answers.length; i++) {
        if(answers[i] == man1[i % man1.length]) count[0]++;
        if(answers[i] == man2[i % man2.length]) count[1]++;
        if(answers[i] == man3[i % man3.length]) count[2]++;
    }

    const max = Math.max(count[0], count[1], count[2]);
    for(let i = 0; i < count.length; i++) {
        if(max == count[i]) answer.push(i + 1);
    }

    return answer;
}

필자가 시간 소요가 됐다고 말한 부분을 간단하게 해결하신 분이 계셨다.
수포자 답안의 인덱스를

man1[i % man1.length]

이런 식으로 작성하셨는데, 이러면 굳이 repeat로 수포자 답안을 늘릴 필요없이
간단하게 반복을 구현할 수 있다.
그 외 로직은 필자와 비슷하다고 생각하므로 설명 생략!

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글