본문 바로가기
알고리즘/백준

[BAEKJOON]25206 너의 평점은

by 응애~ 개발자 2025. 4. 17.
728x90
반응형

문제 요약

  • 알고리즘 분류: 구현, 수학
  • 난이도: Silver5
  • 문제내용:
    • 전공평점은 (학점 × 과목평점)의 합을 학점의 총합으로 나눈 값
    • P/F 과목 중 등급이 'P'인 과목은 계산에서 제외해야 함
    • 20줄에 걸쳐 과목명, 학점, 등급이 주어짐

문제풀이

 이번 문제는 단순하게 구현과 소수 계산을 요구 하는 문제이다. 등급에 따른 과목평점을 정의 한 다음 과목평점이 P를 제외한 총학점과 총 과목 평점을 계산한 뒤 총 과목 평점 / 총 학점계산만 하면 끝이다. 자세한것은 아래 코드보면 된다.

Code

Python

# 등급에 따른 과목평점 정의
grades = {
    "A+" : 4.5,
    "A0": 4.0,
    "B+": 3.5,
    "B0": 3.0,
    "C+": 2.5,
    "C0": 2.0,
    "D+": 1.5,
    "D0": 1.0,
    "F": 0.0
}

s = 0 # (학점 × 과목평점)의 총합을 저장할 변수
count = 0 # 총 학점을 저장할 변수

for _ in range(20):
    _, credit, grade = input().split()
    credit = float(credit) # 학점

    #  P/F 과목 중 P인 경우 계산에서 제외
    if grade != "P":
        s += credit * grades[grade]
        count += credit

# 전공평점 계산 = (학점 × 과목평점)의 총합 / 총 학점
print(s / count)

 

Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {

	// 등급에 따른 과목평점 정의
	static  Map<String, Float> grades = Map.of(
			"A+", 4.5f,
			"A0", 4.0f,
			"B+", 3.5f,
			"B0", 3.0f,
			"C+", 2.5f,
			"C0", 2.0f,
			"D+", 1.5f,
			"D0", 1.0f,
			"F", 0.0f
	);

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));

		float sum = 0; // (학점 × 과목평점)의 총합을 저장할 변수
		float count = 0; // 총 학점을 저장할 변수

		for (int i = 0; i < 20; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			st.nextToken();
			float credit = Float.parseFloat(st.nextToken()); // 학점
			String grade = st.nextToken(); // 등급

			// P/F 과목 중 P인 경우 계산에서 제외
			if(!grade.equals("P")){
				sum += credit * grades.get(grade);
				count += credit;
			}

		}

		// 전공평점 계산 = (학점 × 과목평점)의 총합 / 총 학점
		System.out.println(sum / count);

	}

}

Javascript

var input = require('fs').readFileSync("/dev/stdin", "utf-8").trim().split("\n");
// 등급에 따른 과목평점 정의
const grades = {
    "A+" : 4.5,
    "A0": 4.0,
    "B+": 3.5,
    "B0": 3.0,
    "C+": 2.5,
    "C0": 2.0,
    "D+": 1.5,
    "D0": 1.0,
    "F": 0.0,
};

let totalCredits = 0; // (학점 × 과목평점)의 총합을 저장할 변수
let count = 0;  // 총 학점을 저장할 변수

for (let i = 0; i < 20; i++) {

    let [subject, credit, grade] = input[i].replace("\r", "").split(" ");
    credit = parseFloat(credit);

    // P/F 과목 중 P인 경우 계산에서 제외
    if(grade !== "P"){
        totalCredits += credit * grades[grade];
        count += credit;
    }
}

// 전공평점 계산 = (학점 × 과목평점)의 총합 / 총 학점
console.log(totalCredits / count);

 

728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[BAEKJOON]2745 진법 변환  (0) 2025.04.24
[BAEKJOON]25206 너의 평점은  (0) 2025.04.24
[BAEKJOON]2748 피보나치 수 2  (0) 2025.01.14
[BAEKJOON]1965 상자넣기  (0) 2024.11.27
[BAEKJOON]11055 가장 큰 증가하는 부분 수열  (0) 2024.11.24