단계별로 풀어보기 > 심화 1 > 너의 평점은
https://www.acmicpc.net/problem/25206
전공평점을 계산하는 프로그램을 작성하라.
전공과목별 점수는 학점 x 과목평점이고,
전공평점은 전공과목별의 함을 학점의 총합으로 나눈 값이다.
전공평점을 출력하되, 소수 6자리까지 출력하라.

과목명의 경우 따로 중요하지 않으므로 저장하지 않는다.
각 과목의 학점을 저장하는 credit에 학점을 저장하고, grade의 치훈이의 등급을 저장하여 어떤 등급인지에 대해서 score에 변환하여 저장한다. 변환할 때는 switch case문을 이용한다.
이 후, 총 학점 계산인 gpa에 credit * score 값을 저장하고, 총 학점 값을 저장할 total에 credit을 각각 저장한다.
이 후, gpa가 0임을 대비(0/total이 안되기 때문에)하여 if문을 이용하여 gpa가 0인 경우와 아닌 경우를 나눠서 gpa/total의 값을 출력한다.
import java.io.*;
import java.util.StringTokenizer;
public class 너의_평점은 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
double gpa = 0;
double total = 0;
for(int i = 0; i < 20; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
st.nextToken();
double credit = Double.parseDouble(st.nextToken());
String grade = st.nextToken();
double score = 0;
switch(grade) {
case "A+": score = 4.5;
break;
case "A0": score = 4.0;
break;
case "B+": score = 3.5;
break;
case "B0": score = 3.0;
break;
case "C+": score = 2.5;
break;
case "C0": score = 2.0;
break;
case "D+": score = 1.5;
break;
case "D0": score = 1.0;
break;
case "F": score = 0.0;
break;
case "P": continue;
}
gpa+= credit*score;
total += credit;
}
if(gpa == 0){
bw.write(String.format("%.6f",gpa));
}else{
bw.write(String.format("%.6f", gpa/total));
}
bw.flush();
bw.close();
br.close();
}
}
해당 문제는 무조건적으로 20번만 반복하게 되므로, 시간복잡도는 O(20)이 나오게 된다.
gpa/total이 gpa가 0인 경우를 나눠 봤는데, NaN이 나왔다. Java에서 0을 나누게 되면, NaN이 나온다는 것을 처음 봤다.
