💻 문제





일단 이해하자🤔
- 간단한 문제라고 생각했다.
for문을 이용해서 20줄을 입력 받아 과목명 학점 과목평점을 StringTokenizer를 이용해서 구한 뒤 계산하면 되기 때문이다.
등급이 P인 과목은 계산에서 제외해야 함을 분명히 생각하고 문제를 풀었다. 그러나..
- 학점의 총합에 등급이 P인 과목의 학점도 포함돼서 답이 계속 다르게 나왔다. 뒤늦게 오류를 발견하고 고쳤더니 맞았다😅
👀 풀이
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
String str[] = new String[20];
double totalSum = 0;
double scoreSum = 0;
String gradeList[] = {"A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F", "P"};
double gradeScore[] = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0, 0.0};
for (int i = 0; i < 20; i++) {
str[i] = bfr.readLine();
StringTokenizer st = new StringTokenizer(str[i], " ");
String subject = st.nextToken();
double score = Double.parseDouble(st.nextToken());
String grade = st.nextToken();
for (int j = 0; j < 10; j++) {
if (grade.equals(gradeList[j])) {
totalSum += score * gradeScore[j];
if (j != 9) {
scoreSum += score;
}
}
}
}
double average = totalSum / scoreSum;
System.out.printf("%.6f\n", average);
bfr.close();
}
}
아쉬웠던 점••
- 처음에는
switch-case문을 썼다가 코드가 쓸데없이 길어지고 초보자 같아 배열을 이용한 방법으로 바꿨다. 앞으로 로직을 생각할때 1차원적으로 생각하기 보다 조금만 더 생각해서 더 깔끔하고 보기 쉬운 코드를 짜자.
- 또한 등급이 P인 과목 때문에 하나하나 계산해가면서 디버깅을 했는데 이런 오류가 있었을 줄은 몰랐다. 언제쯤 이런 가벼운 문제는 쉽게 넘어갈련지🙄
감사합니다 큰 도움되었습니다