코틀린/코딩테스트

코딩테스트 [배열의 평균값]

정혜현 2024. 6. 11. 08:44

문제

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

 

https://school.programmers.co.kr/learn/courses/30/lessons/120817


 

풀이

1.1 관찰

배열의 평균값을 구하는 문제

입력 : 배열(정수)

출력 : 실수

 

 

 

1.2 계획

기능 : 각 배열의 요소를 더한다. 총합을 배열의 크기로 나눈다.

반환 : 평균값을 리턴한다.

 

 

 

 

 

 

 

2. 시행착오

2.1 시도

class Solution {
    fun solution(numbers: IntArray): Double {
        var answer: Double = 0
        for(i in numbers.indices){
            answer += numbers[i]
        }
        return answer/numbers.size
    }
}

 

검증결과 : 실패. 리턴값과 리턴타입이 일치하지 않는다는 오류

/Solution.kt:3:30: error: the integer literal does not conform to the expected type Double
        var answer: Double = 0
                             ^

원인분석 : 리턴타입은 Double인데 i는 Int라 안된다.

해결방안 : 평균 메소드 average()를 활용한다.

 

class Solution {
    fun solution(numbers: IntArray): Double {
        var answer: Double = average.toDouble()
        val average = numbers.average()      
        return answer
    }
}

 

최대한 줄였다.

class Solution {
    fun solution(numbers: IntArray): Double = numbers.average()
}

 

2024. 06. 24 메소드 활용이 익숙해졌다. 평균메소드 없이 원래 계획대로 총합에서 개수로 나누는 방법을 구현하겠다. for문으로 합치지않고 sum()을 활용했다. 

class Solution {
    fun solution(numbers: IntArray): Double =
    (numbers.sum().toDouble()) / numbers.size       
}

 

물론 average()를 활용한게 가장 간결하지만 계획한 바를 실천할 수 있어야겠다고 생각해서 시도해봤다.

sum()은 입력에 따라 반환타입이 달라진다. Int를 입력받아 Int로 출력해주므로 toDouble()로 형변환이 필요하고 average()는 반환타입이 Double이라 형변환이 필요없다. 

 


회고

 

 

배열관련 메소드 정리

.sum() .average() 합 평균
.count{} 요소의 개수
.chunked() 각 요소를 (n개로) 청킹하기
.reverse() 뒤집기
.max() .min() 최대값 최소값
.contentToString() 각 요소를 문자열로 변경
.joinToString() 각 요소를 문자열로 결합
.sort() .sortedDescending() 오름차순 내림차순 +2024. 06. 19 sort는 그대로, sorted는 새로 만들어 반환된다.
.reversedArray()
.sortedArray()
.filter{}

원본은 그대로 두고
새 배열로 생성

{조건}걸러내기