티스토리 뷰
반응형
학생들의 학점을 매기는 문제
문제의 조건
1. 학생들의 평가 점수를 담은 1차원 배열 scores가 주어진다.
2. 배열의 행(가로축)에는 열(세로축) 순서로 나열된 학생들이 가로축에 나열된 학생들을 상대로 한 평가임
3. 즉 한 학생의 평가점수는 열(세로축) 라인으로 나열되어 있는 점수들임
4. 평가점수 중에 유일한 최고점 혹은 최저점이면서 자기 자신이 평가한 점수면 평균을 낼 때 제외함
5. 이 때 각 학생들의 평균을 등급을 매겨서 string으로 합쳐서 리턴하기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string Evaluate(float score)
{
if (90 <= score)
return "A";
if (80 <= score && 90 > score)
return "B";
if (70 <= score && 80 > score)
return "C";
if (50 <= score && 70 > score)
return "D";
return "F";
}
string solution(vector<vector<int>> scores)
{
//max_element() 쓸 것이라서 score 행렬 바꿔주기
vector<vector<int>> vecRotation(scores.size(), vector<int>(scores.size()));
for (int i = 0; scores.size() > i; i++)
{
for (int j = 0; scores.size() > j; j++)
vecRotation[i][j] = scores[j][i];
}
vector<float> vecAvges;
for (int i = 0; vecRotation.size() > i; i++)
{
int assessment = scores[0].size(); //한 명당 평가한 총 과제 수
int maxScore = *max_element(vecRotation[i].begin(), vecRotation[i].end());
int minScore = *min_element(vecRotation[i].begin(), vecRotation[i].end());
float sum = 0;
int maxCount = 0, minCount = 0;
bool maxIsOwn = false, minIsOwn = false;
for (int j = 0; vecRotation.size() > j; j++)
{
sum += vecRotation[i][j];
//앞서 구한 최고/최저점과 같으면 카운트를 증가시키는데 자기가 평가한 것이면 flag true 변경
if (maxScore == vecRotation[i][j])
{
maxCount++;
if (i == j)
maxIsOwn = true;
}
if (minScore == vecRotation[i][j])
{
minCount++;
if (i == j)
minIsOwn = true;
}
}
//최고/최저값이 유일하면서 자기가 평가한 점수면 assessment 감소
if (maxIsOwn && 1 == maxCount)
{
sum -= maxScore;
assessment--;
}
if (minIsOwn && 1 == minCount)
{
sum -= minScore;
assessment--;
}
vecAvges.emplace_back(sum/assessment);
}
string answer = "";
for (auto avg: vecAvges)
answer += Evaluate(avg);
return answer;
}
max_element 함수로 최고점을 구한 다음에 그거랑 비교하는 방식으로 하려 했더니 불가피하게 추가 2차원 배열을 만들게 되었는데요,,,
풀고 나서 다른 분들 풀이 보니까 아주 똑똑하게 추가 메모리 필요 없이 푸신 분들 많더라고용...
나도 좀 더 효율적으로 풀어야지...!!
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[C++] 프로그래머스 비밀지도 풀이 (0) | 2021.10.06 |
---|---|
[C++] 프로그래머스 부족한 금액 계산하기 풀이 (0) | 2021.10.06 |
[C++] 프로그래머스 직업군 추천하기 풀이 (0) | 2021.10.03 |
[C++] 프로그래머스 복서 정렬하기 풀이 (0) | 2021.10.02 |
[C++] 프로그래머스 2016 풀이 (0) | 2021.10.01 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 컴퓨터
- 알고리즘
- 아이패드
- DFS
- c++
- 다이나믹프로그래밍
- 캐나다
- BFS
- 코딩공부
- C언어기초
- 프로그래머스
- 해커랭크
- 캐나다생활
- 그리디
- greedy
- 애플
- hackerrank
- 영어공부
- c언어
- 기초
- 문제풀이
- 컴퓨터사이언스
- 너비우선탐색
- 스위프트플레이그라운드
- 프로그래밍
- 깊이우선탐색
- 컴퓨터공부
- dp
- 하드웨어
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함