한 학생의 '수업이름 학점 성적' 에 대한 값을 20개 받으면 평균 학점을 구하는 프로그램이다.
평균 학점은 '총 성적 / 총 학점' 이므로 이를 활용해 문제를 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main2 {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
double numXsung = 0;
double sumNum = 0;
for (int i = 0; i < 20; i++) {
StringTokenizer st = new StringTokenizer(input.readLine());
String name = st.nextToken(); // 과목명
double num = Double.parseDouble(st.nextToken()); // 학점
String sung = st.nextToken(); // 성적
double score = 0;
if (!(sung.equals("P"))) {
switch (sung) {
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;
default:
break;
}
numXsung += (num * score);
sumNum += num;
}
}
System.out.println(numXsung / sumNum);
}
}
어떻게 풀면 좀 더 간단하게 풀 수 있을까 해서 다른 사람의 코드를 참고하여 푼 방법이다. Switch-case 구문을 이용하였으며, P 가 아닌 경우 반복을 진행해 값을 구하는 방식이다. 물론 해당 풀이도 좋지만 내 뜻대로 생각하며 풀어보고 싶었고 아래가 해당 풀이이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
Double[] num = {4.5, 4.0, 3.5, 3.0, 2.5, 2.0, 1.5, 1.0, 0.0};
String[] grade = {"A+", "A0", "B+", "B0", "C+", "C0", "D+", "D0", "F", "P"};
double sumNum = 0;
double totalGrade = 0;
for (int i = 0; i < 20; i++) {
StringTokenizer st = new StringTokenizer(input.readLine());
String name = st.nextToken();
double realNum = Double.parseDouble(st.nextToken());
String realGrade = st.nextToken();
if (!realGrade.equals("P")) {
int index =0;
// 인덱스 찾기 -> num 매칭 시키기 위한
for (int j = 0; j < grade.length; j++) {
if (grade[j].equals(realGrade)){
index = j;
}
}
totalGrade += (realNum * num[index]);
sumNum += realNum;
}
}
System.out.println(totalGrade/sumNum);
}
}
input 값으로 받는 데이터에서 성적이 'P' 가 아닐 경우 받은 데이터의 학점(realNum) 과 성적(realGrade) 의 곱을 전부 더하도록 했다.
근데 이때, 입력받은 성적에 해당하는 실제 점수로 반환한 뒤 계산을 진행해야 하기에 들어온 input 성적 값을 미리 만들어 둔 grade 배열 속에서 찾은 뒤, 그 값의 배열 인덱스를 이용해 num 배열의 인덱스로 대입해 숫자로 바꾸는 과정을 거쳤다.