cosmohoo 2021. 9. 9. 22:36
반응형

문제설명

 

문제설명 2

제한사항

  • 2 ≤ scores의 행의 길이(학생 수) ≤ 10
  • scores의 열의 길이 = scores의 행의 길이
    • 즉, scores는 행과 열의 길이가 같은 2차원 배열입니다.
  • 0 ≤ scores의 원소 ≤ 100 
  • return 값 형식
    • 0번 학생의 학점부터 차례대로 이어 붙인 하나의 문자열을 return 합니다.

입출력 예

scores                                                                                                                                                                           result

[[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"
[[50,90],[50,87]] "DA"
[[70,49,90],[68,50,38],[73,31,100]] "CFD"

 

 

 

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

using namespace std;



char getGrade(int tmp )
{
    char answer; 
    if(tmp>= 90) answer= 'A';
    else if(tmp <90 && tmp >= 80) answer ='B';
    else if(tmp <80 && tmp >= 70) answer ='C';
    else if(tmp <70 && tmp >= 50) answer ='D';
    else answer ='F';
        
    return answer; 
}

string solution(vector<vector<int>> scores) {
        string answer = "";
    int sum=0;// 점수합
    double avg;// 평균 
    int high=0;//최고
    int low=100; //최저
    int self; //본인점수
    int cnt=0;
    int limit = scores.size();
    
    int low_cnt=0;
    int high_cnt=0;
    
    
    for(int i=0; i<limit; i++)
    {
        for(int j=0; j< limit; j++)
        {
      
            if(scores[j][i] >= high)
            {
               high = scores[j][i];  
            }
            if(scores[j][i] <= low)
            {
                low = scores[j][i];
            }
            if(j == i)
            {
                self = scores[j][j];
            }
            sum += scores[j][i];
        }
        for(int k=0; k<limit; k++)
        {
         if(scores[k][i] == low)
         {
             low_cnt++;       
         }
        if(scores[k][i] == high)
        {
             high_cnt++;
        }
        }   
        
        if((self == high && high_cnt<2) || (self == low && low_cnt<2)) //최고점 혹은 최저점이 본인이 부여한 점수이며 해당 점수가 중복되지 않은경우
        {
            sum -= self;
            avg = (double)sum /(double)(limit-1);
        }
        else
        {
            avg= (double)sum / (double)limit;
        }
        char tmp = getGrade(avg);
        answer.push_back(tmp);
        
        high=0; low=100; sum=0;//변수 사용후 초기화
        high_cnt =0; low_cnt=0;
    }
    return answer;
}

 

=> 본인이 본인에게 부여한 점수가 최고점 혹은 최저점에 속하는지 확인하여야한다. 

 

=> 위의 사항에 해당한다하더라도 최고점 혹은 최저점의 갯수가 복수일 경우 해당 점수는 무시하지 않고 계산에 넣어야합니다. (본인은 이 요구사항을 보지 못해 한동안 헤매 회사동기의 도움을 받았습니다😭.) 

 

=> 이중 벡터이지만 2차원배열로 생각하면 됩니다. 

 

=> 본인이 받은 점수가 행이 아닌 열라는 것을 염두에 둬야합니다. (세로 O , 가로 X) 

 

=> 평균을 내야하므로 double형을 사용하여 결과값을 구해야합니다. 

 

 

 

 

 

반응형