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

Kyeongmin·2021년 8월 18일
0

알고리즘

목록 보기
3/24

📃 문제

[위클리 챌린지] 상호 평가 🔗링크

  • 조건
    1. 학생 수 scores 행의 길이 : 2 ≦ 학생 수 ≦ 10
    2. scores 행의 길이 = scores 열의 길이
    3. 평가 점수 scores의 원소 : 0 ≦ 평가 점수 ≦ 100

🧠 풀이

✏️ 본인이 평가한 점수를 제외하는 경우 (아래 조건을 모두 만족하는 경우)

  • 조건 1. Min(한 학생의 평가표) or Max(한 학생의 평가표) == 본인이 평가한 점수
  • 조건 2. 본인이 평가한 점수가 유일한 점수인 경우
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <string.h>

using namespace std;

char get_grade(float score);

string solution(vector<vector<int>> scores) {
    int N = scores.size();
    int score_table[101];
    float avg_scores[10] = {0,};

    string answer = "";

    for(int i=0; i<N; i++){
        memset(score_table, 0, 101*sizeof(int));

        int num = scores[0][i];
        int _min = num;
        int _max = num;
        float total = 0;

        score_table[num]++;
        total += num;

        for(int j=1; j<N; j++){
            int num = scores[j][i];
            score_table[num]++;
            total += num;

            _min = min(_min, num);
            _max = max(_max, num);
        }

        int self_score = scores[i][i];
        int cnt = N;

        if(_min == self_score || _max == self_score){
            if(score_table[self_score] == 1){
                total -= self_score;
                cnt--;
            }
        }
        
        answer += get_grade(total/cnt);
    }

    return answer;
}

char get_grade(float score){
    char grade;

    if(score >= 90)         grade = 'A';
    else if(score >= 80)    grade = 'B';
    else if(score >= 70)    grade = 'C';
    else if(score >= 50)    grade = 'D';
    else                    grade = 'F';

    return grade;
}

❗️ 다른 사람의 풀이 방식

✏️ 본인이 평가한 점수 보다 크거나 작은 경우를 각각 Counting
✏️ 본인이 평가한 점수를 제외하는 경우
      : 크거나 작은 경우가 n(학생의 수)-1과 같은 경우

#include <string>
#include <vector>

using namespace std;

char get_grade(float score);

string solution(vector<vector<int>> scores) {
    int N = scores.size();
    string answer = "";
    
    for(int i=0; i<N; i++){
        int self_score = scores[i][i];
        int cnt = N, min_cnt = 0, max_cnt = 0;
        float total = 0;
        
        for(int j=0; j<N; j++){
            
            if(scores[j][i] > self_score)   max_cnt++;
            if(scores[j][i] < self_score)   min_cnt++;
            total += scores[j][i];
        }
        
        if((min_cnt == cnt - 1) || (max_cnt == cnt - 1)) {
            total -= self_score;
            cnt--;
        }
        
        answer += get_grade(total/cnt);
    }
    
    return answer;
}

char get_grade(float score){
    char grade;
    
    if(score >= 90)         grade = 'A';
    else if(score >= 80)    grade = 'B';
    else if(score >= 70)    grade = 'C';
    else if(score >= 50)    grade = 'D';
    else                    grade = 'F';
    
    return grade;
}
profile
개발자가 되고 싶은 공장장이🛠

0개의 댓글