대학 교수인 당신은, 상호평가를 통하여 학생들이 제출한 과제물에 학점을 부여하려고 합니다. 아래는 0번부터 4번까지 번호가 매겨진 5명의 학생들이 자신과 다른 학생의 과제를 평가한 점수표입니다.
| 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 |
위의 점수표에서, i행 j열의 값은 i번 학생이 평가한 j번 학생의 과제 점수입니다.
당신은 각 학생들이 받은 점수의 평균을 구하여, 기준에 따라 학점을 부여하려고 합니다.
만약, 학생들이 자기 자신을 평가한 점수가 유일한 최고점 또는 유일한 최저점이라면 그 점수는 제외하고 평균을 구합니다.
| 평균 | 학점 |
|---|---|
| 90점 이상 | A |
| 80점 이상 90점 미만 | B |
| 70점 이상 80점 미만 | C |
| 50점 이상 70점 미만 | D |
| 50점 미만 | F |
학생들의 점수가 담긴 정수형 2차원 배열 scores가 매개변수로 주어집니다. 이때, 학생들의 학점을 구하여 하나의 문자열로 만들어서 return 하도록 solution 함수를 완성해주세요.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string calcAvg(int sum, int n) {
int avg = sum/n;
string ans;
// 학점 계산
if(avg>=90) ans = 'A';
else if(avg>=80) ans = 'B';
else if(avg>=70) ans = 'C';
else if(avg>=50) ans = 'D';
else ans = 'F';
return ans;
}
string solution(vector<vector<int>> scores) {
string answer = "";
vector<int> tmp; // 학생별 점수 저장
int n = scores.size();
for(int i=0;i<n;i++) {
int sum = 0; // 학생별 점수의 총 합
int me = 0; // 자기 자신에게 준 점수
tmp.clear();
for(int j=0;j<n;j++) {
tmp.push_back(scores[j][i]);
if(i == j) {
me = scores[j][i];
}
sum += scores[j][i];
}
sort(tmp.begin(), tmp.end()); // 최고점, 최저점 구하기 위해 정렬
// 자기 자신을 평가한 점수가 유일한 최고점인 경우
if(me == tmp[0] && me != tmp[1])
answer += calcAvg(sum-me, n-1);
// 자기 자신을 평가한 점수가 유일한 최저점인 경우
else if(me == tmp[n-1] && me != tmp[n-2])
answer += calcAvg(sum-me, n-1);
else
answer += calcAvg(sum, n);
}
return answer;
}
import java.util.*;
class Solution {
public String solution(int[][] scores) {
String answer = "";
for(int i=0;i<scores.length;i++) {
int sum = 0;
int score = 0;
ArrayList<Integer> list = new ArrayList<>();
for(int j=0;j<scores.length;j++) {
list.add(scores[j][i]);
sum += scores[j][i];
}
Collections.sort(list);
// 자기 자신이 유일한 최고점인 경우
if(scores[i][i] == list.get(scores.length-1) && scores[i][i] != list.get(scores.length-2)) {
sum -= scores[i][i];
score = sum/(scores.length-1);
}
// 자기 자신이 유일한 최저점인 경우
else if(scores[i][i] == list.get(0) && scores[i][i] != list.get(1)) {
sum -= scores[i][i];
score = sum/(scores.length-1);
}
else {
score = sum/scores.length;
}
// 학점 부여
if(score >= 90) answer += "A";
else if(score >= 80) answer += "B";
else if(score >= 70) answer += "C";
else if(score >= 50) answer += "D";
else answer += "F";
}
return answer;
}
}