TIL 016 | 상호 평가 - 프로그래머스 문제풀이

김태규·2021년 8월 9일
1
post-thumbnail

문제

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

1차 풀이

function solution(scores) {
    let answer = '';
    let length = scores.length
    for(let i = 0; i < length; i++){
        let arr = [];
        let max = 0;
        let min = 100;
        for(let j = 0; j < length; j++){
            arr.push(scores[j][i]);   // 이렇게 해야 arr에 '한 열'의 점수가 모인다.
            if(scores[j][i] > max) max = scores[j][i];
            if(scores[j][i] < min) min = scores[j][i];
        }
        if(scores[i][i] === max || scores[i][i] === min) arr.splice(i, 1);
        
        let mean = arr.reduce((a, b) => a + b, 0) / arr.length; // 배열의 누적합/배열의 길이 = 평균
        
        if(mean >= 90) answer+="A";
        else if(mean >= 80 && mean < 90) answer+="B";
        else if(mean >= 70 && mean < 80) answer+="C";
        else if(mean >= 60 && mean < 70) answer+="D";
        else answer+="F";
    }
    return answer;
}

테스트 21개중에 5개는 통과하지 못 했는데, 이유를 곰곰히 생각해보니 문제 조건 중에서 점수를 제외하는 경우는 점수가 유일한 최고점 또는 유일한 최저점일 때라고 했는데 그 부분을 고려하지 못 했다.


2차 풀이

function solution(scores) {
    let answer = '';
    let length = scores.length
    for(let i = 0; i < length; i++){
        let arr = [];
        let max = 0;
        let min = 100;
        for(let j = 0; j < length; j++){
            arr.push(scores[j][i]);
            if(scores[j][i] > max) max = scores[j][i];
            if(scores[j][i] < min) min = scores[j][i];
        }
        let countMax = arr.filter(element => max === element).length;
        let countMin = arr.filter(element => min === element).length;
        
        if(scores[i][i] === max && countMax === 1) arr.splice(i, 1);
        else if(scores[i][i] === min && countMin === 1) arr.splice(i, 1);
        
        let mean = arr.reduce((a, b) => a + b, 0) / arr.length;
        
        if(mean >= 90) answer+="A";
        else if(mean >= 80 && mean < 90) answer+="B";
        else if(mean >= 70 && mean < 80) answer+="C";
        else if(mean >= 50 && mean < 70) answer+="D";
        else answer+="F";
    }
    return answer;
}

유일한 최고점 또는 유일한 최저점일 경우를 어떻게 표현해야할지 혼자서 고민도 해보고 구글링도 해본 결과, filter와 length를 결합해서 arr의 최대값의 개수와 최소값의 개수를 변수 countMax와 countMin에 할당해서 문제를 해결했다.

0개의 댓글

관련 채용 정보