본문 바로가기

프로그래머스 - 코딩테스트

[Java][프로그래머스] - LVL.0 배열의 평균값


정답 1

해당 문제를 딱 처음 본 순간 아 for 문을 사용해야겠다! 라는 생각이 들었다. 그와 동시에 예전에 책에서 봤던 개선된(향상된) for문이 생각이 났고 냅다 코드를 작성해 돌려보았다.

class Solution {
    public double solution(int[] numbers) {
        int sum = 0;
        for(int n : numbers) {
            sum += n;
        }
        return (double)sum/numbers.length;
    }
}

결과는 맞았다.

 

하지만 예전에 접했던 Arrays.stream 이란 기능이 생각이 났다. 그래서 리펙토링을 해보았다.


정답 2

import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        int sum = Arrays.stream(numbers).sum();
        return (double)sum / numbers.length;
    }
}

 

Arrays.stream 에는 sum 이라는 기능이 있다. 그래서 해당 기능을 사용해 손쉽게 int array 의 총합을 구할 수 있었다.

참고로 프로그래머스 답안지라고 해서 코드 박스 상기에 import 문을 빼먹으면 안된다.

 

결과는 맞았다.

 

하지만 다른사람들의 닶을 확인 한 순간 더 완벽한 답안지를 보았다. Array.stream 에 상기 문제에 더 알맞는 기능이 있었다.

 


정답 3 (MVA) - Most Valuable Answer in just my view,,,

import java.util.Arrays;

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

Arrays.stream 에는 int, double 배열의 총합의 평균을 구해주는 .average() 라는 기능이 있었다. 뒤에 orElse() 로 꼭 else 값을 지정해줘야 한다.

 

이러면 너무나도 간단하게 주어진 int 배열의 총합의 평균을 구할 수 있었다.