[프로그래머스] 2주차_상호평가

김개발·2021년 9월 19일
0

프로그래머스

목록 보기
36/42

문제 푼 날짜 : 2021-09-10

문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/83201

접근 및 풀이

아래의 생각대로 코드를 구현하였다.

  1. 각 학생별로 점수표의 최댓값과 최솟값을 체크해준다.
  2. 구해준 최댓값과 최솟값이 해당 학생이 받은 점수중 유일한지 count함수를 이용해 체크해주었다.
  3. 그리고 학생별로 평균을 구해주는데,
    3-1. 스스로에게 매긴 점수가 본인이 받은 모든 점수 내에서 최댓값이면서 유일하거나,
    3-2. 최솟값이면서 유일하면 그 값은 그 학생이 받은 모든 점수의 합에서 빼준다.
  4. 계산된 평균값으로 학점을 매겨준다.

코드

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

using namespace std;

string solution(vector<vector<int>> scores) {
    string answer = "";
    int N = scores.size();

    for (int i = 0; i < N; i++) {
        int sum = 0, total = N;
        vector<int> num;
        for (int j = 0; j < N; j++) {
            num.push_back(scores[j][i]);
            sum += scores[j][i];
        }
        int maxNum = *max_element(num.begin(), num.end());
        int minNum = *min_element(num.begin(), num.end());
        bool minFlag = false, maxFlag = false;
        if (count(num.begin(), num.end(), maxNum) == 1) {
            maxFlag = true;
        }
        if (count(num.begin(), num.end(), minNum) == 1) {
            minFlag = true;
        }

        if (scores[i][i] == maxNum && maxFlag) {
            sum -= scores[i][i];
            total--;
        }
        if (scores[i][i] == minNum && minFlag) {
            sum -= scores[i][i];
            total--;
        }
        double avg = (double) sum / total;
        
        if (avg >= 90) {
            answer += 'A';
        } else if (avg >= 80) {
            answer += 'B';
        } else if (avg >= 70) {
            answer += 'C';
        } else if (avg >= 50) {
            answer += 'D';
        } else if (avg < 50) {
            answer += 'F';
        }
    }
    
    return answer;
}

결과

피드백

실수가 너무 많다. 문제를 꼼꼼히 읽어 실수를 줄이자..

profile
개발을 잘하고 싶은 사람

0개의 댓글