
내가 생각했을때 문제에서 원하는부분
첫째 줄에,
백준이가 이번 학기에 들은 과목 수가 주어진다.
둘째 줄부터 N개의 줄에 각 과목의 과목명,
학점,
성적이 주어진다.
과목명은 알파벳 소문자와 숫자,
그리고 밑줄 (_)로만 이루어져 있으며,
최대 100글자이고,
학점은 1보다 크거나 같고,
3보다 작거나 같은 자연수이다.
성적은 문제에 설명한 13가지 중 하나이다.
첫째 줄에 평균 평점을 소수점 셋째 자리에서 반올림해서 둘째 자리까지 출력한다. (평균 평점이 1.5이면 1.50을 출력한다.)
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 입력받는다.
평점 매핑: 각 성적에 대해 평점을 배열로 정의해준다.
루프: 사용자가 입력한 과목 수만큼 반복하여 각 과목의 학점과 성적을 읽고,
해당 성적의 평점을 계산하여 총 평점을 누적한다.
평균 계산: 총 평점을 총 학점으로 나누어 평균 평점을 계산한다.
출력: printf를 사용하여 소수점 둘째 자리까지 출력한다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2755번 문제
public class Main840 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); // 과목 수 입력
double totalGradePoints = 0.0;
int totalCredits = 0;
// 성적에 따른 평점 매핑
double[] gradePoints = {
4.3, // A+
4.0, // A0
3.7, // A-
3.3, // B+
3.0, // B0
2.7, // B-
2.3, // C+
2.0, // C0
1.7, // C-
1.3, // D+
1.0, // D0
0.7, // D-
0.0 // F
};
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split(" ");
int credits = Integer.parseInt(input[1]); // 학점
String grade = input[2]; // 성적
// 성적에 따른 인덱스 찾기
int gradeIndex = getGradeIndex(grade);
if (gradeIndex != -1) {
totalGradePoints += credits * gradePoints[gradeIndex];
totalCredits += credits;
}
}
// 평균 평점 계산
double average = totalCredits == 0 ? 0.0 : totalGradePoints / totalCredits;
// 소수점 둘째 자리까지 반올림하여 출력
System.out.printf("%.2f\n", average);
br.close();
}
private static int getGradeIndex(String grade) {
switch (grade) {
case "A+": return 0;
case "A0": return 1;
case "A-": return 2;
case "B+": return 3;
case "B0": return 4;
case "B-": return 5;
case "C+": return 6;
case "C0": return 7;
case "C-": return 8;
case "D+": return 9;
case "D0": return 10;
case "D-": return 11;
case "F": return 12;
default: return -1; // 잘못된 성적 처리
}
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.