[알고리즘문제풀기] 길이에 따른 연산

silver's avatar
Mar 01, 2025
[알고리즘문제풀기] 길이에 따른 연산

문제

내가 작성한 정답

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; } }

다른 사람들의 정답

  1. 처음에 삼항연산자로 answer를 정의해줘서 for문을 한 번만 사용할 수 있게 했다.
    1. 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; } }
  1. Stream을 사용
    1. 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