어흥

[프로그래머스] 상호 평가 (C++) 본문

알고리즘/프로그래머스

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

라이언납시오 2021. 8. 30. 18:59
728x90
반응형

문제 링크: 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

1. 주의할 점

- 행/열 구분을 잘 한다

 

2. 구현

- 각 행마다 최대 점수, 최소 점수, 총합을 구한다

- 본인의 점수가 최대 혹은 최소 점수인 경우, 총합과 총 인원을 수정하여 score2grade() 함수를 통해 학점을 계산한다

- 학점들을 모두 붙여서 반환한다

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

string score2grade(float score){
    if(score>=90) return "A";
    else if(score>=80) return "B";
    else if(score>=70) return "C";
    else if(score>=50) return "D";
    else return "F";
}

string solution(vector<vector<int>> scores) {
    string answer = "";
    int maxi, mini, maxiCnt, miniCnt, num = scores[0].size();
    float sum;
    for(int i=0;i<scores.size();i++){
        //초기화
        maxi=-1;
        maxiCnt=1;
        mini=101;
        miniCnt=1;
        sum=0;
        for(int j=0;j<num;j++){
            int score = scores[j][i];
            if(score>maxi){
                maxi = score;
                maxiCnt=1;
            }
            else if(score==maxi) maxiCnt++;
            
            if(score<mini){
                mini = score;
                miniCnt=1;
            }
            else if(score==mini) miniCnt++;
            sum+=score;
        }
        if(scores[i][i]==maxi && maxiCnt==1){
            sum-=maxi;
            answer+=score2grade(sum/(num-1));
        }
        else if(scores[i][i]==mini && miniCnt==1){
            sum-=mini;
            answer+=score2grade(sum/(num-1));
        }
        else answer+=score2grade(sum/num);
    }
    return answer;
}
728x90
반응형
Comments