문제: https://school.programmers.co.kr/learn/courses/30/lessons/120817
문제설명
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
제한사항
- 0 ≤ numbers의 원소 ≤ 1,000
- 1 ≤ numbers의 길이 ≤ 100
- 정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.
나의 문제 풀이
class Solution {
public double solution(int[] numbers) {
double answer = 0;
double sum = 0;
for(int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
answer = sum/numbers.length;
return answer;
}
}
다른사람의 문제 풀이
import java.util.Arrays;
class Solution {
public double solution(int[] numbers) {
return Arrays.stream(numbers).average().orElse(0);
}
}
다른분들의 문제풀이를 보면 와 이렇게도 풀수가 있구나, 와 저게 뭐지...? 하는 두가지 생각중 하나가 든다.
이 풀이는 보자마자 와 저게뭐지? 라는 생각이 들었다,
이것은 스트림(stream) 문법을 사용한 것 이라고 한다.!
Stream: 컬렉션, 배열등의 저장 요소를 하나씩 참조하며 함수형 인터페이스(람다식)를 적용하며 반복적으로 처리할 수 있도록 해주는 기능, 불필요한 코딩(for, if 문법)을 걷어낼 수 있고 직관적이다.
사용형태: 객체 집합.스트림생성().중개연산().최종연산();
- 재사용이 불가능하다.
- 병렬스트림은 여러 스레드가 작업한다.
여러쓰레드가 처리해주니 병렬스트림이 항상 성능면에서 유리해보일 수 있지만, 쓰레드가 많거나 스트림의 요소 수가 많지 않다면 오히려 쓰레드를 사용하는데 드는 오버헤드가 더 클 수도 있다.
- 중개 연산은 미리하지 않는다.(지연 연산을 한다.)
이로써 얻는 장점은 미리 계산하면서 두 번 순회하는 짓을 안할 수 있게 된다는 점이다.
정보 출처: https://jeong-pro.tistory.com/165
'코딩테스트 연습 > 프로그래머스 LV.0' 카테고리의 다른 글
[프로그래머스] Lv.0 배열 원소의 길이 - 자바(Java) (0) | 2024.02.23 |
---|---|
[프로그래머스] Lv.0 머쓱이보다 키 큰 사람 - 자바(Java) (0) | 2024.02.22 |
[프로그래머스] Lv.0 양꼬치 - 자바(Java) (0) | 2023.03.19 |
[프로그래머스] Lv.0 짝수의 합 - 자바(Java) (0) | 2023.03.19 |
[프로그래머스] Lv.0 각도기 - 자바(Java) (0) | 2023.03.19 |