상호 평가

NJW·2021년 8월 15일
0

코테

목록 보기
40/170

2차원 벡터로 이루어져 있는 점수 데이터가 있다. 이때, 열은 각 학생이 행의 학생에게 받은 점수를 의미한다. 스스로 준 점수가 최대이거나 최소일 경우 평균 값에서 제외하고 만일 중복되는 값이 있을 경우에는 그냥 합계로 친다. 이때, 평균의 A, B ... 를 구하라.

사실 이 문제는 아직 제대로 못 풀었다(에잇...).

#include <string>
#include <vector>

using namespace std;

string solution(vector<vector<int>> scores) {
    int count = scores.size(); //벡터의 행 혹은 열 크기
    
    for(int i = 0; i < count; i++){
        int self = scores[i][i]; //자기 자신 값
        int max = scores[0][i]; //최대 값
        int min = scores[0][i]; //최소 값
        int sum = 0;
        bool x = true;
        
        for(int j = 0; j < count; j++){
            if(scores[j][i] <= min){
                min = scores[j][i];
            }
            
            if(scores[j][i] >= max){
                max = scores[j][i];
            }
            
            if(i != j && self == scores[j][i]){
                x = false;
            }
            
            sum = sum + scores[j][i];
            
            if(x && (min == self || max == self)){
            sum = sum - self;
            cout = cout - 1;
            }
        }
        
    }
   
    string answer = "";
    return answer;
}

스스로 준 값이 최대이거나 최소이지만, 다른 이들도 그 값을 주었을 때 x를 false로 해서 제거하지 않도록 해주었다. 다만, 문제는 스스로 준 값이 유일한 최소이거나 최대일때 빼주는 것인데

            if(x && (min == self || max == self)){
            sum = sum - self;
            cout = cout - 1;
            }

스스로 준 값이 100(유일한 최대)일 때, 계속 100을 빼준단 말이지... 100을 한 번만 빼주는 게 아니라, 여러번 빼준다.... 풀 수 있을 거 같은데... 음...

수정했다. if문 안에 x를 false(아래 코드는 내가 수정해서 x가 true이다)로 두었다.

#include <string>
#include <vector>
#include <iostream>

using namespace std;

string abcscore(float avg){
    
    if(90.0 <= avg){
        return "A";
    }else if(80.0 <= avg && avg < 90.0){
        return "B";
    }else if(70.0 <= avg && avg < 80.0){
        return "C";
    }else if(50.0 <= avg && avg < 70.0){
        return "D";
    }else{
        return "F";
    }
   
}

string solution(vector<vector<int>> scores) {
    //벡터의 행 혹은 열 크기
    string answer = "";
    
    for(int i = 0; i < scores.size(); i++){
        int count = scores.size();
        int self = scores[i][i]; //자기 자신 값
        int max = scores[0][i]; //최대 값
        int min = scores[0][i]; //최소 값
        int sum = 0;
        bool x = false;
        float avg = 0;
        
        for(int j = 0; j < scores.size(); j++){
            if(scores[j][i] <= min){
                min = scores[j][i];
            }
            
            if(scores[j][i] >= max){
                max = scores[j][i];
            }
            
            sum = sum + scores[j][i];
            
            if(i != j && self == scores[j][i]){
                x = true;
            }
            

            if(x && (min == self || max == self)){
            sum = sum - self;
            count = count - 1;
            x = true;
            }
        }
        
        avg=static_cast<float>(sum)/count;
        string abc = abcscore(avg);
        answer = answer + abc;
        cout << max << " " << min << " ";
        cout << sum << " " << count << " " << avg << endl;   
    }
   

    return answer;
}

그럼에도 4, 10, 12, 16은 실패다. 왜~~ 왜
if(x && (min == self || max == self))
이 부분에서 문제가 있는 거 같은데, 아아아아아아아아아아아아아아아

profile
https://jiwonna52.tistory.com/

0개의 댓글