반응형
https://www.acmicpc.net/problem/25206
문제

해결 방법
1. 입력 처리: 20줄에 걸쳐 주어지는 과목명, 학점, 등급을 입력받는다.
2. P/F 과목 제외: 등급이 'P'인 경우 계산에서 제외한다.
3. 전공평점 계산:
(학점 × 과목평점)의 합과 총 학점의 합을 누적한다.

위 공식을 이용해 최종 전공평점을 계산한다.
코드 1: 백준 기준 자바 11
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
double totalPoints = 0.0; // (학점 × 과목평점)의 합
double totalCredits = 0.0; // 학점 총합
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 20; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
st.nextToken(); // 과목명 무시
double credit = Double.parseDouble(st.nextToken()); // 학점
String grade = st.nextToken(); // 등급
if (grade.equals("P")) continue; // P 등급 제외
double point = getGradePoint(grade);
totalPoints += credit * point;
totalCredits += credit;
}
System.out.println(totalPoints / totalCredits);
}
public static double getGradePoint(String grade) {
switch (grade) {
case "A+":
return 4.5;
case "A0":
return 4.0;
case "B+":
return 3.5;
case "B0":
return 3.0;
case "C+":
return 2.5;
case "C0":
return 2.0;
case "D+":
return 1.5;
case "D0":
return 1.0;
default:
return 0.0;
}
}
}
코드 2: 자바 13부터 가능한 enhanced switch
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
double totalPoints = 0.0; // (학점 × 과목평점)의 합
double totalCredits = 0.0; // 학점 총합
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 20; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
st.nextToken(); // 과목명 무시
double credit = Double.parseDouble(st.nextToken()); // 학점
String grade = st.nextToken(); // 등급
if (grade.equals("P")) continue; // P 등급 제외
double point = getGradePoint(grade);
totalPoints += credit * point;
totalCredits += credit;
}
System.out.println(totalPoints / totalCredits);
}
public static double getGradePoint(String grade) {
switch (grade) {
case "A+": return 4.5;
case "A0": return 4.0;
case "B+": return 3.5;
case "B0": return 3.0;
case "C+": return 2.5;
case "C0": return 2.0;
case "D+": return 1.5;
case "D0": return 1.0;
default: return 0.0;
}
}
}
코드 설명
1. 입력 처리: BufferedReader와 StringTokenizer를 사용하여 빠르게 입력을 처리한다.
2. P/F 과목 제외: if (!grade.equals("P")) 조건을 사용하여 등급이 'P'인 경우 계산에서 제외한다.
3. 전공평점 계산:
totalPoints += credit * point; 를 통해 (학점 × 과목평점)의 합을 계산한다.
totalCredits += credit; 을 통해 총학점을 누적한다.
totalPoints / totalCredits로 최종 전공평점을 구한 후 출력한다.
시간 복잡도 분석
입력은 고정된 20줄이므로 O(1), 그리고 각 줄을 처리하는 연산도 상수 시간이므로 최종적으로 O(1)의 시간 복잡도를 가진다. 따라서 매우 효율적이다.
반응형
'백준' 카테고리의 다른 글
[백준] 12904번 : A와 B – JAVA [자바] (1) | 2025.03.11 |
---|---|
[백준] 16953번 : A → B – JAVA [자바] (0) | 2025.03.10 |
[백준] 1541번 : 잃어버린 괄호 – JAVA [자바] (0) | 2025.02.25 |
[백준] 28278번 : 스택 2 – JAVA [자바] (0) | 2025.02.25 |
[백준] 1374번 : 강의실 – JAVA [자바] (0) | 2025.02.21 |
댓글