[자바, 알고리즘] BufferReader를 통해 입력받고 한 줄로 형변환하기

Heon·2023년 7월 4일
0

자바

목록 보기
1/4

요즘 코테 준비를 하면서 성능향상을 위해 Scanner 대신 BufferReader를 많이 사용하고 있다.
Scanner처럼 하나씩 입력받는 것보단 buffer를 사용해서 한 번에 입력받는 것이 성능상 효율이 좋다. 그래서 백준이나 여러 코테 정답 코드를 보면 BufferReader를 통해 많이 풀이되어 있는 것을 볼 수 있을 것이다.

근데 문제를 한두 문제 푸는 것도 아니고 풀 때마다 매번 readLine()으로 입력받고 형변환하고 배열 혹은 리스트에 하나씩 넣어주고 귀찮다.

요즘 람다&스트림을 배우고 있었기에 간단하게 입력받는 법을 공유해보려고 한다.

흔히 입력 받을 때 2가지의 경우로 입력받는다

입력조건

// case 1
5
8 6 3 1 7

// case 2
5
8
6
3
1
7

case 1 경우에는 한 줄에 모든 배열의값을 주고
case 2 경우에는 한 줄로 하나의 요소를 입력해준다
바로 코드로 살펴보자

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class test {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        /**
         * case 1
         * 입력 예시
         * 5
         * 8 9 2 1 6
         */
        int[] oneLine = Arrays.stream(br.readLine().split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();
        System.out.println("oneLine = " + Arrays.toString(oneLine));
        /**
         * case 2
         * 입력 예시
         * 5
         * 8
         * 9
         * 2
         * 1
         * 6
         */
        n = Integer.parseInt(br.readLine());
        int[] multiLine = br.lines().limit(n).mapToInt(Integer::parseInt).toArray();
        System.out.println("multiLine = " + Arrays.toString(multiLine));

    }
}

풀이

기본 람다 문법 설명은 생략하도록 하겠다.
여기서 중요한 것은
한 줄을 입력받을 때는 readLine()을 입력받고
여러 줄을 입력 입력받을 때는 lines()를 사용했다는 것이다.
해당 아웃풋에 맞게 전처러리를 람다를 통해 바꿔줬을 뿐이다.

이제 귀찮게 for문 쓰고 그럴 필요 없이 스트림 문법을 통해 한 번에 입력받자.
모르면 그냥 외워서 쓰는 게 맘 편하다.

profile
코딩일기

0개의 댓글