[프로그래머스/C++] 상호평가

최대 1 분 소요

1.문제 링크

상호평가



2. 풀이 전 계획과 생각

  • 구현하기



3. 풀이

#include <string>
#include <vector>

using namespace std;

string solution(vector<vector<int>> scores) {
    string answer = "";
    for(int i=0;i<scores.size();i++){
        int min=101, max=-1;
        int sum=0;
        for(int j=0;j<scores.size();j++){
            sum+=scores[j][i];
            if(scores[j][i]>max) max=scores[j][i];
            if(scores[j][i]<min) min=scores[j][i];
        }
        
        double avg;
        if(scores[i][i]==max){
            bool check=false;
            for(int j=0;j<scores.size();j++){
                if(i!=j && max==scores[j][i]){
                    check=true;
                    break;
                }
            }
            if(check==false){
                sum-=max;
                avg = sum/(scores.size()-1);
            }
            else{
                avg = sum/scores.size();  
            }
        }
        else if(scores[i][i]==min){
            bool check=false;
            for(int j=0;j<scores.size();j++){
                if(i!=j && min==scores[j][i]){
                    check=true;
                    break;
                }
            }
            if(check==false){
                sum-=min;
                avg = sum/(scores.size()-1);
            }
            else{
                avg = sum/scores.size();  
            }
        }
        else{
            avg = sum/scores.size();      
        }
        
        if(avg>=90) answer+="A";
        else if(avg>=80) answer+="B";
        else if(avg>=70) answer+="C";
        else if(avg>=50) answer+="D";
        else answer+="F";
    }
    
    return answer;
}

sum을 구하면서 최소, 최대값을 구한다.

자신이 평가한 값이 혹시 최소, 최대값과 일치하는지 확인한다. 일치하면 이것이 유일한 값인지 체크한다.

각 점수 조건에 맞게 학점을 부여한다.



4. 풀이하면서 고민했던 점

  • 유일한 최고점, 유일한 최고점을 어떻게 유일한지를 확인할까 고민함. for문을 돌면서 중복되는 숫자가 있는지 확인함.



5. 문제를 풀고 알게된 개념 및 소감