티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/83201

 

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

 

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

using namespace std;

int getMinNum(vector<vector<int>> v, int index){
    int minNum = 101;
    for(int i = 0; i < v.size(); i++){
        if(v[i][index] < minNum){
            minNum = v[i][index];
        }
    }
    return minNum;
}

int getMaxNum(vector<vector<int>> v, int index){
    int maxNum = -1;
    for(int i = 0; i < v.size(); i++){
        if(v[i][index] > maxNum){
            maxNum = v[i][index];
        }
    }
    return maxNum;
}

// 자기 자신을 평가한 점수가 min, max 인지, 겹치는지 확인 
bool findMinOrMax(vector<vector<int>> v, int index){
    int minNum, maxNum;

    for(int i = 1; i < v.size(); i++){
        minNum = getMinNum(v, index);
        maxNum = getMaxNum(v, index);
    }

    if(v[index][index] == minNum) {
        for(int i = 0; i < v.size(); i++){
            if(i != index && v[i][index] == minNum) return false;
            if(i == v.size() - 1) return true;
        }
    }
    else if(v[index][index] == maxNum){
        for(int i = 0; i < v.size(); i++){
            if(i != index && v[i][index] == maxNum) return false;
            if(i == v.size() - 1) return true;
        }
    }
    else return false;
}



string solution(vector<vector<int>> scores) {
    string answer = "";
    int sum = 0, len = scores.size();
    float avg;

    // 자기 자신이 평가한 점수가 min, max 라면 -1 로 
    for(int i = 0; i < len; i++){
        if(findMinOrMax(scores, i))  
            scores[i][i] = -1;
    }


    for(int i = 0; i < len; i++){
        int div = len; // 나누기
        sum = 0;
        for(int j = 0; j < len; j++){
            if(scores[j][i] == -1)
                div = len - 1;
            else 
                sum += scores[j][i];
        }
        avg = sum/div;
        if(avg >= 90) answer += "A";
        else if(avg >= 80) answer += "B";
        else if(avg >= 70) answer += "C";
        else if(avg >= 50) answer += "D";
        else answer += "F";
    }

    return answer;
}

 

1. 주어진 벡터에서 각 학생(번호)마다 매겨진 점수를 불러온다. ([i][j] 인덱스 사용 주의, 세로로 평균을 구할 것)

2. 평가 점수 중 가장 큰 점수와 가장 작은 점수를 찾는다 ( getMaxNum(), getMinNum() )

3. 자기 자신을 평가한 열([0][0], [1][1] ... [4][4])과 최소점수, 최대점수가 일치한다면 다른 중복되는 최소, 최대점수가 있는지 확인한다. ( findMinOrMax() )

4. 자기 자신을 평가한 점수가 유일한 최소 혹은 최대 점수라면 true를 반환, 해당 인덱스의 값은 -1로 변환

5. 평균 산출 시 -1로 변한 값이 있다면 분자를 4로, 그렇지 않다면 정상적으로 평균값 도출

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함