문제설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
진행
배열을 얼마나 입력받아야 할지 고민이 됬다
처음엔 사용자가 숫자만 따박따박 쓰고 원할때 바로 계산이 되게 해볼까 했지만
처음에 배열의 크기를 정하고 그 길이만큼 계산되게 만들어 봤다
fun main() {
var siz: Int = 0
println("배열의 크기를 정해주세요")
siz = readln().toInt()
근데 만들면서 사용자가 되게 불편할것 같다는 생각이 들었다
내가 계산하려는 배열을 하나하나 새봐야 한다니
그래서 반복문을 사용해 사용자가 "="연산자를 입력할때까지 입력을 반복하는게 어떨까? 하는 생각이 들어 수정했다
일단 리스트의 크기가 정해져 있지 않으니 가변리스트로 만들어주자
val numbers = mutableListOf<Int>()
사용자가 원할때까지 계속 값을 입력 받게 반복문을 만들고 "=" 연산자를 사용했을때 반복문을 끝내게 한다
일단 숫자를 받을수도 있고 연산자를 받을수도 있다
변수를 새로 설정해서 "="연산자면 바로 계산을 숫자면 배열에 추가를 하도록한다
while (true) {
val input = readLine()
if (input == "=") {
break
}
val number = input?.toIntOrNull() //숫자로 판명되면 이 변수에 정수로 변환해서 넣고 배열에 추가한다
if (number == null) {
println("올바른 숫자를 입력하세요.")
} else {
numbers.add(number)
}
}
이제 솔루션 함수를 작성하면 된다
이쪽은 쉬웠는데
코틀린에서 지원하는 average 함수를 썻다
fun solution(numbers: IntArray): Double {
val sum = numbers.average()
return sum
}
원래라면 sum()으로 합을 구한뒤 배열의 size만큼 나눠야 하지만 average함수를 써 간결하게 풀었다
최종 코드
package com.example.codekata
fun main() {
val numbers = mutableListOf<Int>()
println("숫자를 입력하세요. 입력을 종료하려면 '='를 입력하세요.")
while (true) {
val input = readLine()
if (input == "=") {
break
}
val number = input?.toIntOrNull()
if (number == null) {
println("올바른 숫자를 입력하세요.")
} else {
numbers.add(number)
}
}
if (numbers.isEmpty()) {
println("입력된 숫자가 없습니다.")
return
}
val result = solution(numbers.toIntArray())
println("입력한 숫자의 평균값: $result")
}
fun solution(numbers: IntArray): Double {
val sum = numbers.average()
return sum
}