문제
정수 배열 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{} |
원본은 그대로 두고 새 배열로 생성 {조건}걸러내기 |
'코틀린 > 코딩테스트' 카테고리의 다른 글
코딩테스트 [옷가게 할인 받기] (0) | 2024.06.11 |
---|---|
코딩테스트 [피자 나눠먹기(1)] (0) | 2024.06.11 |
코딩테스트 [배열 두배 만들기] (0) | 2024.06.07 |
코딩테스트 [분수의 덧셈] (0) | 2024.06.07 |
코딩테스트 [각도기] (0) | 2024.06.05 |