본문 바로가기

코딩테스트

[프로그래머스] level1. 위클리 챌린지 2주차 (javascript)

반응형

문제

프로그래머스 문제 링크

나의 풀이

function solution(scores) {
    //배열 뒤집기
    for(let i =0 ; i < scores.length;i++){
        for(let j = i ; j < scores[0].length;j++){
            let tmp = scores[i][j]
            scores[i][j] = scores[j][i]
            scores[j][i] = tmp;
        }
    }

    //최고, 최저점수 제거
    for(let i = 0 ; i < scores.length;i++){
        const max = Math.max(...scores[i]);
        const min = Math.min(...scores[i]);

        if(scores[i][i] === max){
            scores[i].splice(i,1);
            if(scores[i].includes(max)){
                scores[i].push(max)
            }
        }

        if(scores[i][i] === min){
            scores[i].splice(i,1);
            if(scores[i].includes(min)){
                scores[i].push(min)
            }
        }
    }

    //점수들 평균 구하기
    scores = scores.map(score => score.reduce((acc,cur)=>acc +=cur)/score.length)

    //점수에 따른 학점부여    
    scores = scores.map(score => {
        if(score >= 90){
            return "A"
        }
        if( 80 <= score && score < 90){
            return "B"
        }
        if( 70 <= score && score < 80){
            return "C"
        }
        if( 50 <= score && score <70){
            return "D"
        }
        if( score < 50){
            return "F"
        }

    })

    return scores.join("");
}

비교할 대상을 한 배열로 만들기 위해서 배열을 뒤집어 주었고, 이 후 최고,최저점을 확인하고 제거하였으며, 최고,최저점이 혼자만이 아닐때는 다시 넣어주었다. 이후 평균을 계산하고 점수에 따른 학점을 부여하였다.

다른이의 풀이 보완

  1. 처음 배열을 뒤집어 줄때
    //배열 뒤집기
    for(let i =0 ; i < scores.length;i++){
        for(let j = i ; j < scores[0].length;j++){
            let tmp = scores[i][j]
            scores[i][j] = scores[j][i]
            scores[j][i] = tmp;
        }
    }

이렇게 for문을 2번 사용하여 구현하였는데,

 

scores[0].map((_, c) => scores.map(r => r[c]))

 

요런식으로 map을 통하면 한줄로 깔끔하게 가능하다.

  1. 같은 변수를 사용할때는 chaining을 이용해보자.
    예시 ) scores.map( -- ).map( -- )
반응형