728x90
[문제 - 25026번: 너의 평점은 (JAVA)]
[접근 방법]
1. 전공 평점 = (학점 * 과목 평점) / (학점 총합)
2. '과목 평점' 의 문자를 문자 -> double 로 변경하는 함수가 필요하다.
[JAVA 코드]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class BOJ_25206 {
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 sum = 0; //유효 등급 합
double sumMark = 0; //유효 학점 합
for (int i = 0; i < 20; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
st.nextToken(); //강의명
double mark = Double.parseDouble(st.nextToken()); //학점
String grade = st.nextToken(); //등급
//P 등급일 경우 평균 평점(GPA) 계산에서 제외
if (!grade.equals("P")) {
sumMark += mark;
sum += gradeToPoint(grade) * mark;
}
}
double result = sum/sumMark;
bw.write(String.format("%.6f", result) + "");
bw.flush();
bw.close();
}
public static double gradeToPoint(String grade) {
if (grade.equals("A+")) {
return 4.5;
} else if (grade.equals("A0")) {
return 4.0;
} else if (grade.equals("B+")) {
return 3.5;
} else if (grade.equals("B0")) {
return 3.0;
} else if (grade.equals("C+")) {
return 2.5;
} else if (grade.equals("C0")) {
return 2.0;
} else if (grade.equals("D+")) {
return 1.5;
} else if (grade.equals("D0")) {
return 1.0;
} else {
return 0.0;
}
}
}
[Rewind]
1. 어려웠던 점
1) bw.write() 함수가 'int' , 'string' 이외 다른 타입을 지원하지 않는다는 것이다.
따라서, "bw.write( 'double 타입' + "" )"을 이용하여 문자열 타입으로 변경 후 버퍼에 입력한다.
2. 알게된 점
1) bw.write() 의 파라미터 수용 타입
2) String.format("%.2f", '실수타입') => 소수점 아래 2자리 까지
3. 개선 방안
자바에 조금 더 친숙해져야 한다.
728x90
'백준' 카테고리의 다른 글
[BOJ] BOJ_31945 정육면체의 네 꼭짓점 (JAVA) (0) | 2024.07.19 |
---|---|
[BOJ] BOJ_11659 구간 합 구하기 4 (JAVA) (0) | 2024.07.16 |
[BOJ] BOJ_11382 꼬마 정민 (JAVA) (2) | 2024.07.15 |
[백준] 5052번 - 전화번호 목록 (JAVA) (0) | 2023.02.06 |
[백준] 9375번 - 패션왕 신해빈 (JAVA) (0) | 2023.02.05 |