728x90
시간 제한 : 1초
메모리 제한 : 256MB
입력
첫 번째 줄에 학기의 수 T가 주어진다. 두 번째 줄부터 T개 학기에 대한 정보가 주어진다.
각 학기에 대한 정보는 다음과 같이 구성되어 있다. 첫 번째 줄에 들었던 과목의 수 N이 주어지고, 다음 N개 줄에 걸쳐서 N개 과목들의 학점 C와 성적 G가 주어진다. (1 ≤ N ≤ 10, 1 ≤ C ≤ 6의 정수) G는 {0, 0.7, 1, 1.3, 1,7, 2, 2.3, 2.7, 3, 3.3, 3.7, 4, 4.3} 중 하나이며 소수 부분은 최대 한 자리까지 주어진다.
출력
각 학기에 대해 근우의 총 학점과 평점(GPA)을 출력한다. 평점은 소수점 아래 두 번째 자리에서 반올림한다.
소스코드
#include <iostream> using namespace std; int main(void) { int t, n; int sum1, sum2; double c, g; cin >> t; cout.precision(1); while (t--) { sum1 = sum2 = 0.0; cin >> n; for (int i = 0; i < n; i++) { cin >> c >> g; sum1 += g * 10 * c; sum2 += c; } int tmp = (int)((double)sum1 / sum2 + 0.5) * 10; cout << (int)sum2 << " " << fixed << (double)tmp / 100 << "\n"; } }
Tip
이 문제가 되게 쉬운 문제 인데, 그냥 무의식으로 풀면 틀린다. 부동소수점의 오차로 인해 반올림이 제대로 작동하지 않는 경우, 원하지 않는 답이 나오기 때문이다. 필자는 그냥 학점을 아예 정수로 바꿔 소수 첫 번째자리를 기준으로 반올림을 시키고, 마지막에 출력할 때 다시 10을 나눠 출력시켰다.
728x90
'Computer Science > Algorithm Problem' 카테고리의 다른 글
백준] 2942 - 퍼거슨과 사과(COCI 2008/2009) (0) | 2019.01.27 |
---|---|
백준] 2456 - 나는 학급회장이다(한국정보올림피아드:KOI 2011 지역본선) (0) | 2019.01.23 |
백준] 2110 - 공유기 설치 (0) | 2019.01.19 |
백준] 2615 - 오목(KOI 2003 초등부, ACM-ICPC Regionals) (0) | 2019.01.12 |
백준] 4963 - 섬의 개수(ACM-ICPC Regionals) (0) | 2019.01.06 |