프로그래머스_위클리챌린지_2주차

YOU KNOW I MEAN·2021년 8월 10일
post-thumbnail

💬 다른 사람 풀이보기를 잘못 눌러서ㅜㅜ 점수 획득 실패..


📄 문제

대학 교수인 당신은, 상호평가를 통하여 학생들이 제출한 과제물에 학점을 부여하려고 합니다.
당신은 각 학생들이 받은 점수의 평균을 구하여, 기준에 따라 학점을 부여하려고 합니다.
만약, 학생들이 자기 자신을 평가한 점수가 유일한 최고점 또는 유일한 최저점이라면 그 점수는 제외하고 평균을 구합니다.

💡 풀이 방법

  • 2X2 배열의 점수판이 행기준이 아닌 열기준으로 계산되는 것이 포인트라고 생각합니다.
  • 유일한 값이어서 제외될 경우 평균을 구할 때 총 개수도 -1 해야합니다.
  • 자기에게 준 점수가 유일한 최고점, 최저점일 경우는 flag 값을 false로 부여합니다.
  • 유일하지 않고 더 높은 점수 혹은 같을 경우 flag 값을 true로 변경합니다.
  • flag 값에 따라 총 개수를 변경하고 평균과 학점을 계산합니다.

🔥 코드

class Solution {
    public String solution(int[][] scores) {
        int length = scores.length;
        int size[] = new int [length];
        StringBuilder answer = new StringBuilder();
 
        for(int i = 0; i < length; i++) {
            size[i] = length;
        }
        
        for(int i = 0; i < length; i++) {
            int max = 0; 
            int min = 101;
            boolean xcnt = true;
            boolean icnt = true;
            
            for(int j = 0; j < length; j++) {
                if(i == j) {
                    if(scores[j][i] > max) {
                        max = scores[j][i];
                        xcnt = false;
                    }
                    else if(scores[j][i] < min) {
                        min = scores[j][i];
                        icnt = false;
                    }
                }
                else {
                      if(scores[j][i] >= max) {
                        max = scores[j][i];
                        xcnt = true;
                    }
                    else if(scores[j][i] <= min) {
                        min = scores[j][i];
                        icnt = true;
                    }
                }
            }
            if(!xcnt || !icnt) {
                scores[i][i] = 0; 
                size[i]--;
            }
        }
        
        for(int i = 0; i < length; i++) {
            int total = 0;
            for(int j = 0; j < length; j++) {
                total += scores[j][i];
            }
            int balance = total / size[i];
            
            if(balance >= 90) {
                answer.append("A");
            }
            else if(balance >= 80) {
                answer.append("B");
            }
            else if(balance >= 70) {
                answer.append("C");
            }
            else if(balance >= 50) {
                answer.append("D");
            }
            else {
                answer.append("F");
            }
        }
        return answer.toString();
    }
}

👀 느낀 점

예전에 풀지 못한 문제였는데 해결해서 기분이 좋았습니다! 😊

0개의 댓글