[백준] 11024. 더하기 4

1 분 소요

문제 링크

[백준] 11024. 더하기 4


풀이 과정

이 문제는 주어진 N개의 수들을 더해 출력하는 간단한 문제입니다. 이 글은 Stream 에 대한 짤막한 정리와, IntStream 의 reduce 메소드 사용법을 기록하기 위해 올립니다.


자주 사용하는 Stream과 IntStream 의 관계는 위와 같습니다.


http://dl.dropbox.com/s/dc3l02zaoen2tcr/%EB%B0%B1%EC%A4%80-11024_%EB%8D%94%ED%95%98%EA%B8%B0%204-3.png

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

카테고리:

업데이트:

댓글남기기