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문의 조건으로도 줘야해서 intlen을numbers의 길이로 초기화 해 주었다.int len = numbers.length;- for문을
numbers길이 만큼 돌면서 해당 인덱스의numbers원소 answer에 더해주기for (int i = 0; i < len; i++) { answer += numbers[i]; } numbers의 평균 구하기 :answer을len으로 나누어 주자.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(참고 자료)
728x90