문제
내가 작성한 정답
class Solution {
public int solution(int[] num_list) {
int answer = 0;
if(num_list.length > 10){
for(int i : num_list){
answer += i;
}
}else{
answer = 1;
for(int i : num_list){
answer *= i;
}
}
return answer;
}
}
다른 사람들의 정답
- 처음에 삼항연산자로 answer를 정의해줘서 for문을 한 번만 사용할 수 있게 했다.
class Solution {
public int solution(int[] num_list) {
int answer = (num_list.length < 11 ? 1 : 0);
for(int i=0; i<num_list.length; i++){
if(num_list.length < 11) {
answer *= num_list[i];
}else{
answer += num_list[i];
}
}
return answer;
}
}
- Stream을 사용
import java.util.stream.IntStream; // IntStream을 사용하기 위해 import
class Solution {
public int solution(int[] num_list) {
// num_list 배열을 IntStream으로 변환
IntStream stream = IntStream.of(num_list);
// reduce 메서드의 초기값으로 1을 사용하고, 두 개의 요소를 곱하는 람다 함수를 사용하여 곱셈을 수행
return num_list.length > 10 ? stream.sum() : stream.reduce(1, (a, b) -> a * b);
}
}
reduce메서드
reduce 메서드는 스트림이 비어 있을 경우를 대비해 결과를 Optional로 감싸서 반환한다.
→ reduce를 사용할 때 초기값을 제공하지 않으면 결과가 Optional로 반환되고, 초기값을 제공하면 결과는 해당 타입의 기본값으로 반환된다.
reduce는 스트림의 요소들을 결합하여 단일 값을 생성한다. 다양한 집계 작업(합계, 곱셈, 최대값 등)을 가능하게 한다
Share article