01. Scanner, print() 의 문제점
Scanner와 println() 메소드는, 입출력 사항이 있을때, 매번 수행한다.
이때, input, output 장치의 상호작용 속도는 매우 느리다.
그래서 알고리즘 문제를 풀 때 등, 위의 방법을 사용하여 입출력을 구현하면 성능이 매우 떨어진다.
이를 위해서 BufferedReader, BufferedWriter를 사용하여 입출력 속도를 높일 수 있다.
이는 버퍼를 사용하는 방식으로, 입출력을 그때마다 적용하는게 아니라 버퍼에 모아두었다가 한번에 적용시키기 때문에 속도가 증가한다.
02. BufferedReader 사용법
- 버퍼 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- 라인 입력
- BufferedReader를 사용하면, 한줄 단위로 입력을 수행한다.
String s = br.readLine();
- 데이터 가공
- 입력은 무조건 문자열로만 받을 수 있기 때문에, 따로 가공을 해줘야 한다.
int n = Integer.parseInt(br.readLine()); // 정수로 가공
String arr[] = br.readLine().split(" "); // Space로 구분된 문자
03. BufferedWriter 사용법
- 버퍼 생성
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
- 버퍼에 문자 입력
- 버퍼에는 문자열 타입만 입력 가능하다.
- 줄바꿈을 하는 경우는
newLine()
또는 `널문자('\n')\를 포함시켜야 한다. bw.write("1");
bw.newLine();
- 출력
- 버퍼에 포함된 문자를 한번에 출력한다.
bw.flush();
- 버퍼 해방
- 사용 완료한 버퍼는 메모리를 해제시킨다.
- bw.close();
04. 코드 적용
class Main {
public static void main (String[] args) throws java.lang.Exception {
// read/write buf
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// stank
Stack<Integer> st = new Stack();
// read n
int n = Integer.parseInt(br.readLine());
for (int i=0; i<n; i++){
String s = br.readLine();
String arr[] = s.split(" ");
switch(Integer.parseInt(arr[0])){
case 1:
st.push(Integer.parseInt(arr[1]));
break;
case 2:
if(st.isEmpty()) bw.write("-1");
else bw.write(Integer.toString(st.pop()));
bw.newLine();
break;
case 3:
bw.write(Integer.toString(st.size()));
bw.newLine();
break;
case 4:
if(st.isEmpty()) bw.write("1");
else bw.write("0");
bw.newLine();
break;
case 5:
if(st.isEmpty()) bw.write("-1");
else bw.write(Integer.toString(st.peek()));
bw.newLine();
break;
default:
break;
}
}
bw.flush();
bw.close();
}
}
'이것저것 > Java' 카테고리의 다른 글
[Java] Comparator 사용해서 사용자 정의로 배열 정렬하기 (0) | 2024.11.06 |
---|---|
[인텔리제이] Maven Archetype 과 Java FX의 차이점 (1) | 2024.10.22 |
[Java] URL 이미지를 로컬 파일로 저장 (0) | 2024.06.15 |
자바 Optional 자주 쓰는 문법 정리 (0) | 2024.06.15 |
[IntelliJ] 기존 프로젝트 Maven 프로젝트로 변경하기 (Add Framework Support 안보일 때) (0) | 2024.06.06 |