프로그래머스의 상호평가(Lv1) 문제이다.

 

[ 문제풀이 ]

학생들의 학점을 구해야 하는 문제이다.

구하는 과정에서, 자기 자신을 평가한 점수가 유일한 최고점이거나 유일한 최저점이라면 평균에서 제외를 해줘야 한다.

점수를 계산하는 과정에서 최고점인지 최저점인지만 판단을 해주면 된다..

 

점수 하나하나를 확인해가면서 최고점인지 최저점인지 확인을 하면서, 그 점수가 자기 자신을 평가한 점수인지 판단을 하면서 평균을 구해주었다... 별다른 설명보다는 소스코드를 참고하도록 하자..

 

[ 소스코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <string>
#include <vector>
 
using namespace std;
 
int Max(int A, int B) { return A > B ? A : B; }
int Min(int A, int B) { return A < B ? A : B; }
 
char Find_Grade(double Avg)
{
    if (Avg >= 90return 'A';
    else if (80 <= Avg && Avg < 90return 'B';
    else if (70 <= Avg && Avg < 80return 'C';
    else if (50 <= Avg && Avg < 70return 'D';
    return 'F';
}
 
string solution(vector<vector<int>> scores)
{
    string answer = "";
    for (int i = 0; i < scores.size(); i++)
    {
        int Sum = 0;
        int My_Score = scores[i][i];
        int Max_Score = 0;
        int Min_Score = 150;
        bool Flag = true;
 
        for (int j = 0; j < scores[i].size(); j++)
        {
            int Score = scores[j][i];
            Sum += Score;
            if (i != j && Score == My_Score) Flag = false;
            Max_Score = Max(Max_Score, Score);
            Min_Score = Min(Min_Score, Score);
        }
 
        char Grade;
        if ((Max_Score == My_Score && Flag == true|| (Min_Score == My_Score && Flag == true))
        {
            Sum -= My_Score;
            double Avg = (double)Sum / (double)(scores[i].size() - 1);
            Grade = Find_Grade(Avg);
        }
        else
        {
            double Avg = (double)Sum / (double)(scores[i].size());
            Grade = Find_Grade(Avg);
        }
        answer += Grade;
    }
    return answer;
}
cs

 

+ Recent posts