반응형
문제
풀이
전공평점은 전공과목별 (학점 × 과목평점)의 합을 학점의 총합
우선 위 공식에 따라 아래 내용을 구해야 한다.
1. 전공과목별 합 : 학점 X 과목평점
2. 학점의 총합
3. P 가 점수인 것은 계산에서 제외
소수점이 들어가니 float, double 중에 선택한다. 나는 float 으로 선택했다.
띄어쓰기로 구분되기 때문에 BufferedReader 과 함께 StringTokenizer 을 선언해준다.
입력하는 한 줄에 과목, 학점, 성적까지 전부 들어가니 변수를 생성하여 토큰 값을 담아준다.
* 이후로 계속 사용되기 때문에 변수에 담아주는 것이 좋다.
grade의 앞자리를 확인하는 switch 문을 작성했다.
A : 4, B : 3, C : 2, D : 1로 추가하면 된다.
공통되어 나타나는 + 와 0은 따로 함수를 생성해주었다.
+ 일 경우 0.5 반환, 0일 경우 0 반환.
전공과목별 합 / 학점의 총합으로 계산하여 출력하면 된다.
코드
코드의 주의할 점은, switch 표현식을 사용했기 때문에 자바 14 이상의 버전으로 제출해야한다.
처음에 11로 제출했다가 컴파일 오류가 발생했다.
package Study.src.bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B25206 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
float sum = 0;
float gpaSum = 0;
for (int i = 0; i < 20; i++) {
st = new StringTokenizer(br.readLine());
// 변수에 담기
String subject = st.nextToken();
float gpa = Float.parseFloat(st.nextToken());
String grade = st.nextToken();
// gpa 가 P 일 경우 계산에서 제외
if (grade.charAt(0) !='P') gpaSum += gpa;
// 과목명이 길 경우 return
if (subject.isEmpty() || subject.length() > 50) return;
// grade 의 앞 점수 확인
switch (grade.charAt(0)){
case 'A':
sum += gpa * (4 +chkDetailScore(grade.charAt(1)));
break;
case 'B':
sum += gpa * (3 +chkDetailScore(grade.charAt(1)));
break;
case 'C':
sum += gpa * (2 +chkDetailScore(grade.charAt(1)));
break;
case 'D':
sum += gpa * (1 +chkDetailScore(grade.charAt(1)));
break;
case 'P':
break;
default:
sum += 0;
break;
}
}
// 전공과목별 합 / 학점의 총합
System.out.println(sum/gpaSum);
}
// +,0 추가 점수 확인.
private static float chkDetailScore(char detail) {
float rtn = switch (detail) {
case '+' -> 0.5f;
case '0' -> 0;
default -> 0;
};
return rtn;
}
}
반응형