본문 바로가기
Language/Java

[Programmers | Java | 코딩테스트 입문 문제 풀이] 배열의 평균값 - Solution with Stream API || Loop

by ㅇ달빛천사ㅇ 2024. 6. 5.
728x90

KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | Algorithm CODEKATA

⚖️ 배열의 평균값

🏷 Topic : 평균 average().orElse() 반복문


문제 설명

정수 배열 numbers가 매개변수로 주어집니다.

numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.


제한사항

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


입출력 예

numbers *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입니다.


✔ Solution with Stream API

import java.util.Arrays;

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

        return answer;
    }
}
채점 결과


✔ Solution with Loop of 'for' statement

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        int len = numbers.length;

        for (int i = 0; i < len; i++) {
            answer += numbers[i];
        }

        answer /= len;

        return answer;
    }
}
채점 결과


✔ Solution with Loop of 'forEach' statement

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;

        for (int n : numbers) {
            answer += n;
        }

        answer /= numbers.length;

        return answer;
    }
}
채점 결과


💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍

📌 오늘 만난 문제의 Point! : 정수 배열 numbers의 원소의 평균값을 반환하라!


1. Stream API 이용하기


예전에 Stream API로 sum, count 등을 한 기억이 있어서 average도 있지 않을까? 해서 검색해 봄.
역시나 있었다. average().orElse(값)
그대로 numbers에 사용해 보았다.


  double answer = (double)Arrays.stream(numbers).average().orElse(0);

  return answer;

2. for문 사용하기

가장 기본적으로 많이 사용할 것 같은 for문 사용하기
이번 문제는 코딩테스트 입문 단계의 문제라 이 방법이 가장 무난하지 않을까? 생각해 보면서 코드를 써 보았다.

  • numbers의 길이를 나중에 평균을 구할 때, 나누어주어야 하기도 하고 for문의 조건으로도 줘야해서 int lennumbers의 길이로 초기화 해 주었다.
    int len = numbers.length;
  • for문을 numbers길이 만큼 돌면서 해당 인덱스의 numbers원소 answer에 더해주기
    for (int i = 0; i < len; i++) {
        answer += numbers[i];
    }
  • numbers의 평균 구하기 : answerlen으로 나누어 주자.
    answer /= numbers.length;

3. forEach문 사용하기

  • forEach문으로 numbers의 원소 값 하나씩 가져와서 answer에 더해주기
    for (int n : numbers) { 
        answer += n; 
    }
  • numbers의 평균 구하기 : answer 나누기 numbers의 길이
    answer /= numbers.length;

🎉 오늘의 알고리즘 코드카타 Clear! 🎉


💬 무엇을 새롭게 알았는지

  • Stream API에 average도 있다.
    단, 반드시 뒤에 .orElse()도 붙여주어야 한다.
  • 속도는 Stream API 보다 Loop가 더 빨리 나온다!
    (Stream API 쓰는 거 보면 뭔가 멋있어 보이던데 빠르고 좋아서 그런게 아니었던 걸까? 아니면 대용량 데이터에 적합한 걸까? 이유는 아직 모르겠다.

📚 References(참고 자료)

[자바(JAVA)] 배열의 평균값 (stream average()와 orElse(0))

[Java] Stream API 개념 정리

728x90


Top