코딩테스트 - 프로그래머스/Lv. 0

[31] JAVA 배열의 평균 값

유혁스쿨 2023. 11. 16. 12:22
728x90
반응형

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

제한사항

  • 0 ≤ numbers의 원소 ≤ 1,000
  • 1 ≤ numbers의 길이 ≤ 100
  • 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.


입출력 예

age result
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] 94.0

 

입출력 예 #1

  • numbers의 원소들의 평균 값은 5.5입니다.

입출력 예 #2

  • numbers의 원소들의 평균 값은 94.0입니다.

[나의 풀이]

import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {        
        return Arrays.stream(numbers)
            .mapToDouble(element -> (double)element)
            .average()
            .getAsDouble();
    }
}

 

[풀이과정] 

Arrays.stream(numbers)를 통해 배열을 Stream으로 변환.

mapToDouble(element -> (double)element)을 통해 int타입의 배열요소들을 double타입으로 모두 변경한 stream을 반환.

average()로 평균값을 연산한 Optional타입 결과를 반환

getAsDouble()로 double타입값으로 반환

 

풀면서 mapToDouble이 아닌 map으로 하다가 컴파일오류가나서 검색을했다.


[다른 풀이]

import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        return Arrays.stream(numbers).average().orElse(0);
    }
}

내 코드와 비슷하게 Arrays.stream을 사용하였고,

double로 변경하지 않고 바로 평균값을 구한 뒤 getAsDouble()의 Exception 방식 대신

orElse(0)을 통해 null인 경우 0을 반환해줄 수 있는 기본값을 설정한 코드이다.

 

여기서 핵심은 stream의 평균 연산의 경우 소수점을 포함한 double형태로 연산이 진행된다는 것이다.

728x90
반응형

'코딩테스트 - 프로그래머스 > Lv. 0' 카테고리의 다른 글

[33] JAVA 편지  (0) 2023.11.16
[32] JAVA 양꼬치  (0) 2023.11.16
[30] JAVA 짝수의 합  (0) 2023.11.16
[29] JAVA 각도기  (0) 2023.11.16
[28] JAVA 두 수의 나눗셈  (0) 2023.11.16