조교의_성적_매기기

Taewonee·2021년 6월 2일
0

문제풀이

목록 보기
2/7

문제출처(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을 리턴해야합니다.
}

이렇게 마무리!

profile
not only but also

0개의 댓글