문제 푼 날짜 : 2021-09-10
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/83201
아래의 생각대로 코드를 구현하였다.
- 각 학생별로 점수표의 최댓값과 최솟값을 체크해준다.
- 구해준 최댓값과 최솟값이 해당 학생이 받은 점수중 유일한지 count함수를 이용해 체크해주었다.
- 그리고 학생별로 평균을 구해주는데,
3-1. 스스로에게 매긴 점수가 본인이 받은 모든 점수 내에서 최댓값이면서 유일하거나,
3-2. 최솟값이면서 유일하면 그 값은 그 학생이 받은 모든 점수의 합에서 빼준다.- 계산된 평균값으로 학점을 매겨준다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<vector<int>> scores) {
string answer = "";
int N = scores.size();
for (int i = 0; i < N; i++) {
int sum = 0, total = N;
vector<int> num;
for (int j = 0; j < N; j++) {
num.push_back(scores[j][i]);
sum += scores[j][i];
}
int maxNum = *max_element(num.begin(), num.end());
int minNum = *min_element(num.begin(), num.end());
bool minFlag = false, maxFlag = false;
if (count(num.begin(), num.end(), maxNum) == 1) {
maxFlag = true;
}
if (count(num.begin(), num.end(), minNum) == 1) {
minFlag = true;
}
if (scores[i][i] == maxNum && maxFlag) {
sum -= scores[i][i];
total--;
}
if (scores[i][i] == minNum && minFlag) {
sum -= scores[i][i];
total--;
}
double avg = (double) sum / total;
if (avg >= 90) {
answer += 'A';
} else if (avg >= 80) {
answer += 'B';
} else if (avg >= 70) {
answer += 'C';
} else if (avg >= 50) {
answer += 'D';
} else if (avg < 50) {
answer += 'F';
}
}
return answer;
}
실수가 너무 많다. 문제를 꼼꼼히 읽어 실수를 줄이자..