본문 바로가기
카테고리 없음

학점계산 백준 프로그램 소개

by 월드2@ 2024. 10. 29.

학점 계산 프로그램 만들기

안녕하세요! 오늘은 학교 포털 사이트에서 데이터를 가져와 학점을 계산하는 프로그램을 만들어보려고 합니다. 이 프로그램은 주어진 등급 데이터를 사용하여 평균 학점을 계산해줍니다.

등급별 학점 표

먼저, 등급별 학점은 다음과 같습니다

등급 학점
A+ 4.5
A 4.0
B+ 3.5
B 3.0
C+ 2.5
C 2.0
D+ 1.5
D 1.0
F 0.0

문제 설명

주어진 문자열 S는 과목별 등급이 나열된 형태로 제공됩니다. 이 문자열을 바탕으로 평균 학점을 계산해야 합니다. 예를 들어, 문자열이 "A+A"라면 평균 학점은 (4.5 + 4.0) / 2 = 4.25가 됩니다.

입력 및 출력 형식

입력 첫째 줄에 과목별 등급이 나열된 문자열 S가 주어집니다. 등급 사이에는 별도의 구분자가 없으며, 최대 1,000 글자로 이루어져 있습니다.
출력 문자열 S에 나열된 등급으로 구한 학점의 산술평균을 첫째 줄에 출력합니다. 정답과 출력값의 절대/상대 오차는 10^{-4}까지 허용됩니다.

예제

입출력 예시는 다음과 같습니다

입력 출력
A+A 4.25
A+AB+B+C 3.5
CA+ABBB+A 3.42857

Kotlin 코드 구현

이제 Kotlin을 사용하여 문제를 해결하는 코드를 작성해보겠습니다.

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val input = readLine()
val grades = mapOf(
"A+" to 4.5,
"A" to 4.0,
"B+" to 3.5,
"B" to 3.0,
"C+" to 2.5,
"C" to 2.0,
"D+" to 1.5,
"D" to 1.0,
"F" to 0.0
)
var totalScore = 0.0
var count = 0
var i = 0
while (i < input.length) {
val grade = if (i + 1 < input.length && input[i + 1] == '+') {
input.substring(i, i + 2)
} else {
input.substring(i, i + 1)
}

totalScore += grades[grade] ? 0.0
count++

i += if (grade.length == 2) 2 else 1
}
val averageScore = totalScore / count
bw.write(String.format("%.5f", averageScore))
bw.flush()
bw.close()
}

코드 설명

  1. 입력 받기 BufferedReader를 사용하여 입력을 받습니다.
  2. 등급-학점 매핑 grades 맵을 사용하여 각 등급에 해당하는 학점을 저장합니다.
  3. 학점 계산 입력 문자열을 순회하면서 각 등급에 해당하는 학점을 더하고, 총 과목 수를 셉니다.
  4. 평균 계산 및 출력 총 학점을 과목 수로 나누어 평균을 계산하고, 소수점 다섯째 자리까지 출력합니다.
    이렇게 하면 주어진 등급 데이터를 바탕으로 평균 학점을 정확하게 계산할 수 있습니다! 도움이 되셨길 바랍니다.
    01234567891011121314