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

Kotlin] 백준 1546번 문제 풀이

by 김마리님 2023. 4. 27.

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

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

 

 

풀이

더보기

첫 줄로 들어오는 값을 떼서 전체 과목의 갯수로 저장해두고,

두 번째 들어오는 값으로 " " 로 split하여, 해당 숫자를 double로 파싱 한 배열을 만들어둔다. 그리고 이 배열의 최댓값을 구해둔다.

배열을 회전하며 주어진 식 (해당 값)/(최댓값) * 100으로 계산한 값을 더한다.

(앞서, 배열을 double로 파싱하는데, 이 때 int로 배열을 파싱하면 배열 내 값도 int, maximize도 int로 된다. int는 소수점을 제공하지 않는다. 따라서 주어진 식으로 계산하면 해당 값이 최댓값보다 작기 때문에 나누면 0이 된다.)

이 더한 값에 첫 줄에 구해둔 전체과목의 갯수를 나누면 결과가 나온다.

 

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main(args: Array<String>) {
    question1546()
}

fun question1546() {
    var reader = BufferedReader(InputStreamReader(System.`in`))
    var writer = BufferedWriter(OutputStreamWriter(System.out))
    var addGrades = 0.0

    var number = reader.readLine().toInt()
    var grades = reader.readLine().split(" ").map { it.toDouble() }
    var max = grades.max()

    grades.forEach {
        addGrades += it / max * 100.0
    }

    writer.write("${addGrades / number}")
    writer.flush()
}

 

반응형