본문 바로가기
백준

[백준] 25206번 : 너희 평점은 – JAVA [자바]

by Hongwoo 2025. 3. 7.
반응형

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)의 시간 복잡도를 가진다. 따라서 매우 효율적이다.

반응형

댓글