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

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

silver