문제
게으른 근우는 열심히 놀다가 문득, 자신의 학점 평균이 얼마일지 궁금해졌다. 학사시스템도 들어가기 귀찮아하는 근우를 위해 구해주도록 하자.
입력
첫 번째 줄에 학기의 수 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)을 출력한다. 정답과의 절대 오차는 10-1까지 허용한다.
풀이
배열을 통해서 풀어보았다. 처음에는 출력에 "정답과의 절대 오차는 10-1까지 허용한다."라는 말을 크게 신경안쓰고 그냥 예제 출력대로 소수점 첫째자리 수까지 표현하면 되겠지...라고 생각했는데 그게 아니다. Math.round() 함수를 통한 반올림을 해야 정답처리로 인정되는 문제이니 주의하길 바란다.(필자는 왜 틀렸는지 몰라서 한참 고민하다가 나중에 출력 문구에 눈을 돌려 확인하고 통과되었다)
배열을 통해서 과목당 학점, GPA(평점)을 입력받고 저장해준다. 그런다음 sum에는 학점의 합을, answer에는 학점*GPA를 해준다음에 출력에서 출력형식에 맞게 출력을 해주면 끝나는 문제이다.
※주의할것은 Math.round(answer*10/sum)/10.0)을 해줘서 반올림 소수점 첫째자리까지 표현해 주도록한다.
(System.out.printf("%.f",answer/sum)은 반올림이 아니라 버림이므로 바로 오류가 나니까 주의!)
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
|
class Main {
public static void main(String[] args) throws Exception {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
int sum=0;
double answer=0;
outline:for(int i=0;i<N;i++) {
int subject_num=sc.nextInt();
int [] point=new int [subject_num];
double [] GPA= new double [subject_num];
for(int j=0;j<subject_num;j++) {
point[j]=sc.nextInt();
GPA[j]=sc.nextDouble();
}
for(int k=0;k<subject_num;k++) {
sum+=point[k];
}
for(int u=0;u<subject_num;u++) {
answer+=(double)point[u]*GPA[u];
}
sum=0;answer=0;
}
}
}
|
https://www.acmicpc.net/problem/10984
'Algorithms > BOJ[Java]' 카테고리의 다른 글
[백준/2609번] 최대공약수와 최소공배수 [Java] (0) | 2019.12.05 |
---|---|
[백준/2747번] 피보나치 수 [Java] (0) | 2019.12.05 |
[백준/1550번] 16진수 [ Java] (0) | 2019.12.04 |
[백준/11050번] 이항 계수 1 [Java] (0) | 2019.12.03 |
[백준/10988번] 팰린드롬인지 확인하기 [Java] (0) | 2019.12.03 |