본문 바로가기
스터디(beakjoon)

Kotlin] 백준 25206번 문제풀이

by 김마리님 2023. 6. 12.

https://www.acmicpc.net/problem/25206

 

25206번: 너의 평점은

인하대학교 컴퓨터공학과를 졸업하기 위해서는, 전공평점이 3.3 이상이거나 졸업고사를 통과해야 한다. 그런데 아뿔싸, 치훈이는 깜빡하고 졸업고사를 응시하지 않았다는 사실을 깨달았다! 치

www.acmicpc.net

 

 

풀이

더보기

이 문제는.. 시키는데로 따라가면 풀 수 있다.

 

일단 외부에 전체 학점 수, 전체 점수를 전역변수로 지정한다.

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)}")
}
반응형