본문 바로가기
알고리즘

Programmers - 상호평가

by 장중앙 2021. 9. 14.

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

 

풀이

(y, x)-> y가 x를 평가한 점수

한명에 대한 평가들을 누적합하면서 최소값, 최대값, 최소값 갯수, 최대값 갯수를 확인

자기자신을 평가한 점수가 유일한 최고점/최저점이라면 그 점수를 제외하고 평균을 계산

  - (자기 자신 점수==min/max) && (max/min_cnt==1)

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

string check_score(int score){ // 평균점수에 대한 학점
    if(score>=90)
        return "A";
    else if(score>=80&&score<90)
        return "B";
    else if(score>=70&&score<80)
        return "C";
    else if(score>=50&&score<70)
        return "D";
    else
        return "F";
}

string solution(vector<vector<int>> scores) {
    string answer = "";
    int size=scores.size();
    for(int i=0;i<size;i++){
        int min_cnt=0;
        int max_cnt=0;
        int min=100;
        int max=0;
        int sum=0;
        for(int j=0;j<size;j++){
            int now=scores[j][i];
            if(min>now){
                min=now;
                min_cnt=1;
            }
            else if(min==now){
                min_cnt++;
            }
            
            if(max<now){
                max=now;
                max_cnt=1;
            }
            else if(max==now){
                max_cnt++;
            }
            
            sum+=now;
        }
        //자기자신의 점수가 최저/최대이면서 최저/최대 점수의 갯수가 1개이면 누적점수에서 제외
        if((scores[i][i]==min&&min_cnt==1)||(scores[i][i]==max&&max_cnt==1)){
            sum-=scores[i][i];
            sum/=(size-1);
        }
        else{
            sum/=size;
        }
        answer+=check_score(sum);
    }
    return answer;
}

'알고리즘' 카테고리의 다른 글

BOJ 2467 - 용액(C++)  (0) 2021.09.15
Programmers - 직업군 추천하기  (0) 2021.09.15
Programmers - 부족한 금액 계산하기  (0) 2021.09.14
Programmers - 문자열 압축(Python)  (0) 2021.09.06
Programmers - 자물쇠와 열쇠(C++)  (0) 2021.09.05

댓글