개발새발 - IT 기술블로그
article thumbnail

백준 알고리즘  너의 평점은 25206번- 코틀린 풀이

 

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

 

25206번: 너의 평점은

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

www.acmicpc.net

 


 

문제

 


정답

import java.util.*;


fun main() {
    val sc = Scanner(System.`in`)
    var sum = 0.0
    var sumScore = 0.0

    for(i in 0..19) {
        val subject = sc.next()
        val score = sc.nextDouble()
        val grade = sc.next()
        val parsedGrade = parseGradeToScore(grade)
        if (parsedGrade != -1.0) {
            sum += parsedGrade * score
            sumScore += score
        }
    }

    println(sum / sumScore)
}

fun parseGradeToScore(grade: String): Double {
    return when(grade) {
        "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}
        else -> {-1.0}
    }
}

 


풀이

 

이번 문제는 평균 학점을 구하는 문제입니다.

 

문제에서 제시되었듯이 P(Pass) 과목을 제외한 나머지 과목들의 등급을 과목학점으로 변환하고, 이를 학점과 곱하여 학점의 총합으로 나누어 주는 결과물을 출력하면 됩니다.

 

아래 함수에서 등급에 따른 과목학점을 변환하는 과정을 거칩니다.

fun parseGradeToScore(grade: String): Double {
    return when(grade) {
        "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}
        else -> {-1.0}
    }

 

변환한 과목학점이 -1.0이 아닌경우 (= P 등급이 아닌경우) sum 변수에 스코어와 곱하여 누적시켜준 뒤,

학점의 총합에 현재 과목의 학점을 누적시켜줍니다.

val parsedGrade = parseGradeToScore(grade)
if (parsedGrade != -1.0) {
    sum += parsedGrade * score
    sumScore += score
}

 

생각보다 간단한 문제인데, 그나마 헷갈릴만한 부분은 학점의 총합에 대한 설명이 없다는 것 같습니다.

 

 

감사합니다.