알고리즘 문제풀이/프로그래머스

[프로그래머스/위클리 챌린지] 2주차 (C++)

노력의천재 2021. 8. 12. 17:10

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

현재 행을 기준으로 평균을 구하는 것이 아니라, 열을 기준으로 평균을 구하는 것을 주의(세로로 평균을 구해야 함)

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string answer = "";

void getGrade(int avg) {
    if(avg >= 90) answer += "A";
    else if(avg >= 80 && avg < 90) answer += "B";
    else if(avg >= 70 && avg < 80) answer += "C";
    else if(avg >= 50 && avg < 70) answer += "D";
    else answer += "F";
}

string solution(vector<vector<int>> scores) {
    int size = scores.size();
    
    for(int i = 0; i < size; i++) { // col
        int sum = 0, maxx = -2147000000, minn = 2147000000, now = scores[i][i];
        
        for(int j = 0; j < size; j++) { // row
            if(i == j) continue;
            maxx = max(maxx, scores[j][i]);
            minn = min(minn, scores[j][i]);
            sum += scores[j][i];
        }
        
        if(now < minn || now > maxx) {
            getGrade(sum / (size - 1));
            continue;
        }
        
        sum += now;
        getGrade(sum / size);
    }
    
    return answer;
}