[Algorithm] 프로그래머스 - 위클리 챌린지 2주차 (JavaScript)

swing·2021년 8월 9일
2

[Algorithm]

목록 보기
7/96

풀이

  1. scores를 각 학생이 받은 점수로 바꾸기 위해 행과 열을 바꾼다.
  2. 조건3개에 부합하면 continue
    • 조건1. 학생이 자기자신한테 준 점수인지 판별
    • 조건2. 조건1을 통과한 점수가 최댓값||최솟값인지 판별
    • 조건3. 조건1,2를 통과한 점수가 유일한 값인지 판별
  3. 부합하지 않다면, totalScore에 학생 번호와 맞는 인덱스에 점수를 누적한다.
  4. 또한 누적할때 cnt도 학생 번호와 맞는 인덱스에 ++해준다.
  5. totalScore를 순회하며 cnt[index]만큼 나눈 값을 통해, 학점문자열로 바꿔서 answer에 더해준다.
  6. return answer

코드

function solution(scores) {
    for(let i=0;i<scores.length;i++){
        for(let j=0;j<i;j++){
            [scores[i][j],scores[j][i]] = [scores[j][i],scores[i][j]]
        }
    }
    
    let answer = '';
    let totalScore = new Array(scores.length).fill(0);
    let cnt = new Array(scores.length).fill(0);
    
    for(let i=0;i<scores.length;i++){
        for(let j=0;j<scores[i].length;j++){
            let temp = scores[i][j];
            
            if(i === j){
                if(Math.max(...scores[i]) === temp || Math.min(...scores[i]) === temp){
                    if(scores[i].indexOf(temp) === scores[i].lastIndexOf(temp)){
                        continue;
                    }        
                }    
            }
            totalScore[i] += temp;
            cnt[i]++;
        }
    }
    totalScore.forEach((v,index) => {
        answer += makeCredit(Math.floor(totalScore[index] / cnt[index]))
    })
    return answer
}

function makeCredit(num){
    if(num>=90){
        return "A"
    }
    if(num < 90 && num >= 80){
        return "B"
    }
    if(num < 80 && num >= 70){
        return "C"
    }
    if(num < 70 && num >= 50){
        return "D"
    }
    return "F"
}

참조

profile
if(기록📝) 성장🌱

0개의 댓글