반응형
https://programmers.co.kr/learn/courses/30/lessons/83201
단순 구현문제였습니다.
📕 풀이방법
📔 풀이과정
1. 한 열에 대해 최댓값, 최솟값을 찾습니다.
2. 중복 여부를 확인하기 위해 최댓값, 최솟값들의 개수를 각각 세줍니다.
3. 다시 한 열에 대해 최소 또는 최댓값이 유일하다면 sum에 더하지 않고 평균을 구할 때도 나누는 인원수에서 1을 제해야합니다. 따라서 flag를 세워준 뒤 continue해줍니다.
4. 해당 학생의 평균점수를 보고 학점을 산출한 뒤 answer에 push_back해줍니다.
📔 정답출력
최종 학생별 학점인 answer문자열을 반환합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
char getDegree(double avg){
if(avg >= 90.0) return 'A';
if(avg >= 80.0) return 'B';
if(avg >= 70.0) return 'C';
if(avg >= 50.0) return 'D';
return 'F';
}
string solution(vector<vector<int>> scores) {
string answer = "";
for(int i = 0; i < scores.size(); i++){
int minScore = 0x3f3f3f3f;
int maxScore = 0;
int minCnt = 0;
int maxCnt = 0;
for(int j = 0; j < scores[i].size(); j++){
minScore = min(minScore, scores[j][i]);
maxScore = max(maxScore, scores[j][i]);
}
for(int j = 0; j < scores[i].size(); j++){
if(scores[j][i] == minScore) minCnt++;
if(scores[j][i] == maxScore) maxCnt++;
}
double sum = 0;
int flag = 0;
for(int j = 0; j < scores[i].size(); j++){
if(j == i){
if(scores[j][i] == minScore && minCnt == 1) { flag = 1; continue; }
if(scores[j][i] == maxScore && maxCnt == 1) { flag = 1; continue;}
}
sum += scores[j][i];
}
double avg = sum / (scores.size() - flag);
answer.push_back(getDegree(avg));
}
return answer;
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 1952번 : 달팽이 (0) | 2021.08.13 |
---|---|
(C++) - 백준(BOJ) 17143번 : 낚시왕 (0) | 2021.08.13 |
(Rust) - 백준(BOJ) 1000번 : A + B (0) | 2021.08.10 |
(Rust) - 백준(BOJ) 2557번 : Hello World (0) | 2021.08.07 |
(C++) - 백준(BOJ) 13224번 : Chop Cup (0) | 2021.08.06 |