21.05.19 기록

최대 1 분 소요

  • 백준 알고리즘 11654 풀이 완료

    • 내가 푼 11654 풀이 (메모리 14.7MB, 시간 136ms로 통과)
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class B11654 {
        public static void main(String[] args) {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            try {
                System.out.println(br.read());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    


    • 알고리즘을 다시 시작하면서 가장 첫번째로 했던 일이 Scanner에서 벗어나기 였다. BufferedReader를 사용하게 되면서 가장 먼저 의아했던 것이 read()도 있는데 왜 굳이 readLine()을 사용해야하지? 였고 read()에 대해 찾아본 기억이 있다. 덕분에 이 문제를 보자마자 read()를 사용하면 되겠다 싶어서 문제 풀이는 어렵지 않았다. 하지만 풀이를 찾아보고 나니… 그동안 미루었던 산을 만나게 되었다.


  • 아래는 풀이 코드이다.
import java.io.IOException;

public class B11654 {
    public static void main(String[] args) {
        try {
            System.out.println(System.in.read());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


  • 풀이는 그냥 System.in의 read()를 사용하여 출력해주었다. 다시 내 코드를 보면 아직 입출력 스트림에 대해 잘 알지는 못하면서 일단 출력을 얻어내기 위해 스트림을 사용한 모습이 보였다.

  • 그래서 오늘도 스트림이 뜬구름 같이 느껴진다 하더라도 일단 공부해야겠다 싶어서 풀이 글을 쓴 필자의 입력스트림 글을 정독했다.

  • 덕분에 몰랐던 혹은 잊었던 특징들을 상기시킬 수 있었다.
    System 클래스의 in은 InputStream 타입의 변수이다.
    InputStream은 1byte만 읽을 수 있고 한글을 읽지 못한다.
    InputStreamReader는 바이트 단위를 문자 단위로 처리할 수 있도록 InputStream을 확장한 개념이다. (byte → char)
    BufferedReader는 buffer를 통해 입력받은 문자들을 쌓아둔 뒤 한 번에 처리한다. 즉, 문자열 단위처럼 다룰 수 있다.
  • 이 문제는 입력 받은 값의 아스키 코드 값을 출력하는 문제이다. 따라서 InputStream만으로도 해결할 수 있기 때문에 System.in.read()의 값을 출력하면 풀리는 것이다.

카테고리:

업데이트: