학점 계산 프로그램 만들기
안녕하세요! 오늘은 학교 포털 사이트에서 데이터를 가져와 학점을 계산하는 프로그램을 만들어보려고 합니다. 이 프로그램은 주어진 등급 데이터를 사용하여 평균 학점을 계산해줍니다.
등급별 학점 표
먼저, 등급별 학점은 다음과 같습니다
등급 | 학점 |
---|---|
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()
}
코드 설명
- 입력 받기
BufferedReader
를 사용하여 입력을 받습니다. - 등급-학점 매핑
grades
맵을 사용하여 각 등급에 해당하는 학점을 저장합니다. - 학점 계산 입력 문자열을 순회하면서 각 등급에 해당하는 학점을 더하고, 총 과목 수를 셉니다.
- 평균 계산 및 출력 총 학점을 과목 수로 나누어 평균을 계산하고, 소수점 다섯째 자리까지 출력합니다.
이렇게 하면 주어진 등급 데이터를 바탕으로 평균 학점을 정확하게 계산할 수 있습니다! 도움이 되셨길 바랍니다.