728x90
코딩테스트 연습 - 2주차 | 프로그래머스 (programmers.co.kr)
🔎 문제 설명
score라는 보드에 학생들의 상호평가 점수가 주어진다.
각 학생들이 받은 평가의 평균을 구해 기준에 따라 학점을 부여함
만약 자기자신을 평가한 점수가 유일한 최고/최저점이면 그 점수는 제외하고 평균을 구할 때 제외함.
🔎 풀이 과정
생각보다 쫌 헤맸던 문제...
행과 열을 반대로 계산하고 있어서 왜틀렸지?? 한참을 고민했다...
자기 자신을 평가한 점수가 유일한 최고, 최저점이라는 조건이 중요!!
나는 cnt라는 변수를 2개 생성해서 만약 최대/최소값이 평가점수랑 같으면 카운트 해줬다.
그리고 cnt1 == 1이고 최대값이 자기 자신일 때만 그 점수를 빼고 평균을 계산하게 했다.
한가지 주의할 점은 평균은 실수형이어야 한다는 것..?
<정답 코드>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
double avg[10];
string solution(vector<vector<int>> scores) {
string answer = "";
for (int i = 0; i < scores.size(); i++) {
int mx = -1e9;
int mn = 1e9;
for (int j = 0; j < scores.size(); j++) {
avg[i] += scores[j][i]; // i, j가아닌 j, i !
mx = max(mx, scores[j][i]);
mn = min(mn, scores[j][i]);
}
int cnt1 = 0, cnt2 = 0; //cnt1은 max를, cnt2는 min을 카운트
for (int j = 0; j < scores.size(); j++) {
if(scores[j][i] == mx) cnt1++;
else if (scores[j][i] == mn) cnt2++;
}
if ((cnt1 == 1 && mx == scores[i][i]) || (cnt2 ==1 && mn == scores[i][i])) {
avg[i] -= scores[i][i];
avg[i] /= (scores.size() - 1);
} else {
avg[i] /= scores.size();
}
}
for (int i = 0; i < scores.size(); i++) {
if (avg[i] >= 90) answer += "A";
else if (avg[i] >= 80) answer += "B";
else if (avg[i] >= 70) answer += "C";
else if (avg[i] >= 50) answer += "D";
else answer += "F";
}
return answer;
}
🔎 몰랐던 개념
1) 2차원 벡터의 크기
행(row) = arr.size()
열(col) = arr[0].size()
2) 문자열 더하기
c++에선 문자열을 연산자로 더할 수있다.
ex) answer += "A"
728x90
'Algorithm > Solution' 카테고리의 다른 글
[프로그래머스] 내적 (0) | 2021.08.12 |
---|---|
[프로그래머스] 두 정수 사이의 합 (0) | 2021.08.10 |
[프로그래머스] 소수 만들기 (0) | 2021.08.06 |
[프로그래머스] 음양 더하기 (0) | 2021.08.06 |
[프로그래머스] 위클리 챌린지 1주차 문제 - 부족한 금액 계산하기 (0) | 2021.08.05 |