문제출처(D2: 쉬움)
시간이 별로 없어서 쉽게 풀 수 있는 문제를 풀었다.
쉽게 잘 풀어냈다.
https://swexpertacademy.com/main/code/problem/problemDetail.do
문제설명
조교가 성적을 매긴다!
학생들의 중간, 기말, 과제 성적을 총합산해서 등수를 부여한다.
K 번째로 input한 학생의 학점을 구한다.
학점은 A+ A0 A- B+ B0 B- C+ C0 C- D로 총 10단계가 나눠져있고
한 학점을 전체 학생들의 10%까지 줄 수 있다.
학생들은 10의 배수이고, K번째 학생과 동점은 없다.
아래와 같이 일단 INPUT을 몽땅 받아서 float vector에다 모두 저장했다.
int students, index;
cin >> students;
cin >> index;
int a, b, c;
vector<float> scores;
for (int i = 0; i < students; i++)
{
cin >> a >> b >> c;
scores.push_back(0.35 * a + 0.45 * b + 0.2 * c);
}
target_score를 찾고(기억하기 위해), vector를 sorting 했다.
float target_score = scores[index - 1];
sort(scores.begin(), scores.end());
target_score를 통해 target_index(등수)를 찾는다
int target_index = 0;
for (int i = 0; i < students; i++)
{
if (scores[i] == target_score)
{
target_index = i;
break;
}
}
10으로 나눠주면 바로 학점을 확인할 수 있다. 어려운 부분은 switch 인데, 잘 안썼어서 어려웠다ㅋㅋ
string ans = "";
int temp = students / 10;
switch (target_index / temp)
{
case 9:
ans = "A+";
break;
case 8:
ans = "A0";
break;
case 7:
ans = "A-";
break;
case 6:
ans = "B+";
break;
case 5:
ans = "B0";
break;
case 4:
ans = "B-";
break;
case 3:
ans = "C+";
break;
case 2:
ans = "C0";
break;
case 1:
ans = "C-";
break;
case 0:
ans = "D0";
break;
default:
break;
}
cout << "#" << test_case << " " << ans << endl;
}
return 0; //정상종료시 반드시 0을 리턴해야합니다.
}
이렇게 마무리!