https://www.acmicpc.net/problem/25206
풀이
더보기
이 문제는.. 시키는데로 따라가면 풀 수 있다.
일단 외부에 전체 학점 수, 전체 점수를 전역변수로 지정한다.
20개가 주어진다고 했으니 반복문을 20개로 걸어둔다
반복문마다 readLine을 받아 split으로 과목명, 학점, 등급 순으로 나눠둔다.
만약 등급이 P라면 계산에서 제해야하므로 continue로 다음 입력을 받는다.
아니라면 먼저 등급별 점수를 계산하는데, 나같은 경우는 F ~ A+까지 배열로 넣어두었다. 이 때 F를 제외하고는 1부터 시작하여 0.5씩 증가하는 등차수열을 가지고 있다. 즉, (index+1) * 0.5를 하면 해당 등급 점수를 알 수 있다.
여기서 구한 등급 점수를 학점에 곱한 값을 전체 점수에 넣어둔다. 이 때, 학점 역시 전역변수에 더해둔다.
전체 배열을 다 돌면 전체 점수와 전체 학점이 있는데, 이를 6자리로 반올림 하기 위헤 String.format("%.(원하는 소수점)", 원하는 값)을 넣어 반올림한다.
fun main(args: Array<String>) {
question25206()
}
fun question25206() {
var gradeCount = 0.0
var gradeAll = 0.0
var gradeArray = arrayOf("F", "D0", "D+", "C0", "C+", "B0", "B+", "A0", "A+")
for(i in 1 .. 20) {
var grades = readLine()!!.split(" ")
if(grades[2] == "P") {
continue
} else {
gradeCount += grades[1].toDouble()
val grade = if(grades[2] == "F") {
0.0
} else {
(gradeArray.indexOf(grades[2]) + 1) * .5
}
gradeAll += (grade * grades[1].toDouble())
}
}
println("${String.format("%.6f", gradeAll/gradeCount)}")
}
반응형
'스터디(beakjoon)' 카테고리의 다른 글
Kotlin] 백준 2738번 문제풀이 (0) | 2023.06.13 |
---|---|
Kotlin] 백준 1316번 문제풀이 (0) | 2023.06.13 |
Kotlin] 백준 1316번 문제풀이 (1) | 2023.06.09 |
Kotlin] 백준 2941번 문제풀이 (1) | 2023.06.09 |
Kotlin] 백준 1157번 문제풀이 (0) | 2023.06.08 |