본문 바로가기
코딩 테스트/[JAVA] programmers 코딩 테스트 연습

[Programmers/JAVA] 상호 평가 / 프로그래머스 코딩 테스트 연습 / 위클리 챌린지 2주차

by M개발자 2021. 8. 9.
반응형

상호 평가

 


문제 설명

 

출처 프로그래머스 코딩테스트 연습 위클리 챌린지 2주차 상호 평가

 


예시

 

 

scores result
[[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD"
[[50,90],[50,87]] "DA"
[[70,49,90],[68,50,38],[73,31,100]] "CFD"

코드 해석 및 전체 코드

 

1. 평균을 담을 배열 선언

2. 평균을 구하기 위해 이중 for문 사용

3. 등급을 구하기 위해 for문 사용

 

1. 평균을 담을 배열 선언

scores의 길이만큼 1차원 배열을 선언한다. 처음에는 total 값만을 저장하기 위해 배열을 선언하여 변수명을 total로 지정하였지만, total값을 구한 뒤 평균 값을 다시 배열에 저장한다.

 

2. 평균을 구하기 위해 이중 for문 사용

for문 내 변수 설명 

i, j ) 이중 for문의 i는 scores의 행, j는 socres의 열을 의미한다.

max, min ) 조건 중 자신이 준 점수가 최고점, 최저점이라면 그 값을 제외한 평균을 구해야한다. 그래서 최고점, 최저점을 구하기 위해 max와 min 변수를 선언하였다.

 

total값 구하기

안쪽 for문에선 totals에 자신이 받은 점수들을 모두 더한다.

그리고 자신에게 준 점수가 다른 사람이 준 점수보다 높다면 max를 1 더하고, 낮다면 min을 1 더한다.

 

자신이 준 점수가 최고점, 최저점인지 구하기 & 평균값 구하기

바깥쪽 for문에선 안쪽 for문을 반복하기 전에 max와 min 변수를 0으로 초기화하고, 

max 또는 min 값이 자신을 제외한 학생 수와 같을 경우 자신이 준 점수를 total값에서 제외한 뒤, 평균을 낸다. 

평균을 구할 때는, 자신의 점수를 제외했으므로 자신을 제외한 학생 수(= totals.length -1)로 나누어야한다.

 

자신이 준 값이 최고점, 최저점이 아니라면 total값을 학생 수만큼 나눠 평균값을 구한다.

 

class Solution {
    public String solution(int[][] scores) {
        String answer = "";
        
        double[] totals = new double[scores.length];
        
        for(int i = 0; i < scores.length; i++){
            int max = 0;
            int min = 0;
            for(int j = 0; j < scores.length; j++){
                totals[i] += scores[j][i];
                if(scores[i][i] > scores[j][i]) max++;
                if(scores[i][i] < scores[j][i]) min++;
            }
            if(max == totals.length -1 || min == totals.length -1) {
                totals[i] -= scores[i][i];
                totals[i] /= totals.length - 1;
            }
                
            else totals[i] /= totals.length;
            
        }
        
        for(int i = 0; i < totals.length; i++){
            if(totals[i] >= 90) answer += "A";
            else if(totals[i] >= 80) answer += "B";
            else if(totals[i] >= 70) answer += "C";
            else if(totals[i] >= 50) answer += "D";
            else answer += "F";
        }
    
        return answer;
    }
}

github

programmers

 

반응형

댓글