개발하는 kim-hasa

[c++][프로그래머스] 위클리 챌린지 2주차 본문

Algorithm/Programmers(c++)

[c++][프로그래머스] 위클리 챌린지 2주차

kim-hasa 2021. 8. 9. 23:58

https://programmers.co.kr/learn/courses/30/lessons/83201?language=cpp

 

코딩테스트 연습 - 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

상호 점수를 매겨서 평가하는데, 자신의 점수가 유일한 최고점이거나 유일한 최저점인 경우 제외하고 평균을 계산합니다.

 

먼저, 점수를 모두 더합니다. 이때, 가장 큰 수와 가장 작은 수를 기록하면서 내 점수와 같은 점수가 있는지(유일한지 아닌지) 검사합니다.

 

1. 유일하지 않다면 바로 평균을 계산합니다.

2. 유일한 최고점/최저점인 경우 빼고 평균을 계산합니다.

3. 아닌경우 그냥 계산합니다. 

 

그리고 점수에 따라서, 정답 string에 추가합니다.

#include <string>
#include <vector>

using namespace std;

string solution(vector<vector<int>> scores) {
    string answer = "";
    
    int len = scores.size();     // 인원수 저장
    double sum = 0;                // 총점
    int myScore;                // 자신의 점수
    int bigScore, smallScore;   // 최고점, 최저점
    int scoreCount = 0;     // 최고, 최저점일때 유일한지 판명하는 변수
    double avg;                 // 평균
    
    for(int i=0; i<scores.size(); i++)
    {   
        
        myScore = scores[i][i];      // 자신의 점수 저장
        bigScore = -1;
        smallScore = 101;           // 최고, 최저점 설정
        sum = 0;
        scoreCount = 0;
        
        for(int j=0; j<len; j++)
        {
            sum += scores[j][i];
            
            if(j != i)  // 자기 점수 제외
            {
                if(scores[j][i] == myScore)  // 같다면, 유일하지 않음
                {
                    scoreCount = 1;
                }
            }
            
            if(bigScore < scores[j][i])  // 최고점 저장
                {
                    bigScore = scores[j][i];
                }
                if(smallScore > scores[j][i])    // 최저점 저장
                {
                    smallScore = scores[j][i];
                }
        }
        
        if(scoreCount == 1)
        {   // 유일하지 않거나
            avg = sum / len;
        }
        else if(bigScore == myScore && scoreCount == 0)
        {   // 유일한 최고점
            sum -= myScore;
            avg = sum / (len-1);
        }
        else if(smallScore == myScore && scoreCount == 0)
        {   // 유일한 최저점
            sum -= myScore;
            avg = sum / (len-1);
        }
        else
        {
            avg = sum / len;
        }
        
        if(avg >= 90)
        {
            answer += 'A';
        }
        else if(avg >= 80 && avg < 90)
        {
            answer += 'B';
        }
        else if(avg >= 70 && avg < 80)
        {
            answer += 'C';
        }
        else if(avg >= 50 && avg < 70)
        {
            answer += 'D';
        }
        else
        {
            answer += 'F';
        }   
    }  
    return answer;
}