21.05.19 기록
-
백준 알고리즘 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()를 사용하면 되겠다 싶어서 문제 풀이는 어렵지 않았다. 하지만 풀이를 찾아보고 나니… 그동안 미루었던 산을 만나게 되었다.
- 내가 푼 11654 풀이 (메모리 14.7MB, 시간 136ms로 통과)
- 아래는 풀이 코드이다.
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()의 값을 출력하면 풀리는 것이다.