[프로그래머스(Programmers)][자바(java)] (Lv1) 2주차 - 상호 평가 <위클리 챌린지>

728x90

 

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

 

코딩테스트 연습 - 2주차

[[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" [[70,49,90],[68,50,38],[73,31,100]] "CFD"

programmers.co.kr

 

 

문제 요약

 

학생들의 점수가 담긴 정수형 2차원 배열 scores가 매개변수로 주어집니다. 이때, 학생들의 학점을 구하여 하나의 문자열로 만들어서 return 하도록 solution 함수를 완성하세요

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

제외할 점수는 제외하고 평균을 구한 후, 아래 기준에 따라 학점을 부여합니다.

평균 학점
90점 이상 A
80점 이상 90점 미만 B
70점 이상 80점 미만 C
50점 이상 70점 미만 D
50점 미만 F

 

 

문제 풀이

 

public class Solution {

	public String solution(int[][] scores) {
		StringBuilder sb = new StringBuilder();
		int n = scores.length, i, j;
		int s, sum, max, min, m, score; char c;
		for (j = 0; j < n; ++j) {
			sum = max = 0; min = 100; m = n;
			for (i = 0; i < n; ++i) {
				s = scores[i][j];
				sum += s;
				if( i == j )
					continue;
				max = max < s ? s : max;
				min = min > s ? s : min;
			}
			s = scores[j][j];
			if (max < s || min > s) {
				sum -= s;
				m--;
			}
			score = sum / m;
			c = score >= 90 ? 'A' : score >= 80 ? 'B' : score >= 70 ? 'C' : 
			    score >= 50 ? 'D' : 'F';
			sb.append(c);
		}
		return sb.toString();
	}
    
}

 

우선 전달받은 scores[]을 토대로 각 학생의 평균을 구해야 함

ex) 점수표

No. 0 1 2 3 4
0 100 90 98 88 65
1 50 45 99 85 77
2 47 88 95 80 67
3 61 57 100 80 65
4 24 90 94 75 65
평균 45.5 81.25 97.2 81.6 67.8
학점 F B A B D

각 학생이 자기 자신을 평가한 점수가 유일한 최고점이거나 유일한 최저점이려면,
자기 자신을 평가한 점수를 제외한 나머지 점수들 중에서 최고점과 최저점을 구한 후,
최고점이 자기 자신을 평가한 점수보다 작거나,
최저점이 자기 자신을 평가한 점수보다 커야 한다.
( 같으면 '유일'하지 않으므로 안 됨 )

유일한 최고점or최저점 이라면, 점수의 총합에서 자기 자신을 평가한 점수를 빼고 평균을 구함

학점 기준표를 보고 평균에 대한 학점을 구하고,
StringBuilder를 이용하여 차례로 더함

 

 

반응형