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

제리·2021년 1월 7일
0

프로그래머스

목록 보기
3/25

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

function solution(answers) {
    var answer = [];
    
    const s1 = [1,2,3,4,5]
    const s2 = [2,1,2,3,2,4,2,5]
    const s3 = [3,3,1,1,2,2,4,4,5,5]
    
    let s1Idx = 0
    let s2Idx = 0
    let s3Idx = 0
    
    let s1Answer = 0
    let s2Answer = 0
    let s3Answer = 0
    
    for(const number of answers){
        if(s1[s1Idx] == number) s1Answer++
        if(s2[s2Idx] == number) s2Answer++
        if(s3[s3Idx] == number) s3Answer++
        
        s1Idx++
        s2Idx++
        s3Idx++
        
        s1Idx %= s1.length
        s2Idx %= s2.length
        s3Idx %= s3.length

    }
    
    const maxAnswer = Math.max(s1Answer,s2Answer,s3Answer)
    
    if(s1Answer === maxAnswer) answer.push(1)
    if(s2Answer === maxAnswer) answer.push(2)
    if(s3Answer === maxAnswer) answer.push(3)

    
    return answer;
}

각 학생들의 순서를 배열로 미리 정의하고 각기 다음 인덱스를 가르키도록 변수를 설정하였다.
마지막에는 최대값을 구하고 최대값에 해당하는 점수를 가진 학생만 배열에 넣는 방법으로 하였다.
하드코딩된것 같은데 더 효율적이고 깔끔한 방법이 있을지 고민해봐야겠다.
시간복잡도는 O(n)이다.

profile
흐릿한 잉크가 뚜렷한 기억보다 낫다

0개의 댓글