ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상호 평가
    프로그래머스(Programmers) 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형을 사용하여 결과값을 구해야합니다. 

     

     

     

     

     

    반응형

    '프로그래머스(Programmers)' 카테고리의 다른 글

    복서 정렬하기 C++  (0) 2021.10.07
    모음사전 C++  (0) 2021.10.07
    부족한 금액 계산하기 C++  (0) 2021.09.07
    로또의 최고순위와 최저순위  (0) 2021.09.06
    기능개발  (0) 2021.09.05

    댓글

Designed by Who.