[백준] 11024. 더하기 4
문제 링크
풀이 과정
이 문제는 주어진 N개의 수들을 더해 출력하는 간단한 문제입니다. 이 글은 Stream 에 대한 짤막한 정리와, IntStream 의 reduce 메소드 사용법을 기록하기 위해 올립니다.
자주 사용하는 Stream과 IntStream 의 관계는 위와 같습니다.
Stream 과 IntStream 모두 BaseStream 인터페이스를 상속하는 것을 알 수 있습니다.
참고로, static 제너릭 메소드는 제러닉 리턴 타입을 명시해주어야 하기 때문에 리턴타입 앞에 <T> 가 붙습니다.
Arrays.stream(br.readLine().split(" "))
위 코드는 Stream 객체를 리턴하며,
Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt)
위 코드까지 진행하게 되면, Stream 객체를 IntStream 객체로 변환하게 됩니다. 이 때, 변경 전 Stream 객체의 타입은 String 이기에, 매퍼 함수를 통해 Integer 타입으로 파싱해줍니다.
Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).reduce(0, Integer::sum)
변경된 IntStream 객체로 reduce 메소드를 호출했습니다.
reduce 메소드는 첫 번째 인자로 identity를 ,두 번째 인자로 IntBinaryOperator 라는 객체인 함수를 받습니다. identity
는 스트림의 요소가 없을 때 기본적으로 리턴할 값을, 또는 reduction 연산의 기본 값을 의미합니다. op
는 함수 형태이며, 누산에 필요한 연산을 의미합니다.
reduce(0, (a, b) → a + b);
는 모든 IntStream 객체를 순회하며 값을 누산시킨 값을 리턴하며, Integer 클래스의 static 메소드 sum 으로도 표현할 수 있습니다.
코드
import java.io.*;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int TC = Integer.parseInt(br.readLine());
while (TC-- > 0)
bw.write(Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).reduce(0, Integer::sum) + "\n");
bw.flush();
}
}
댓글남기기