1. 문제
◽ 주소 : https://www.acmicpc.net/problem/2557
2557번: Hello World
Hello World!를 출력하시오.
www.acmicpc.net
◽ 문제 내용 :
2. 풀이
◽ 풀이 1 : System.out.print() 사용 (System 클래스 - 표준입출력)
public class Main {
public static void main(String[] args) {
System.out.print("Hello World!");
}
}
- 자바 배울때 제일 먼저 배우고 가장 흔하게 사용하는 방법이다.
- 하지만 속도면에서 매우 느린편에 속한다. 왜냐하면 리소스를 많이 사용하여 성능 부하를 초래하기 때문이다.
- 입출력이 많은 코드에서는 지양하는 것이 좋다.
◽ 풀이 2 : BufferedWriter 사용
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("Hello World!");
bw.flush();
bw.close();
}
}
- BufferedWriter은 Buffer에 있는 IO 클래스로 데이터를 버퍼에 저장해두었다가 한번에 출력하는 방식으로 동작한다.
- 데이터를 하나씩 출력하는 것이 아니라 한번에 출력하므로 속도가 빠르다.
- 입출력이 많은 코드에서 지향하는 방식이다.
- bw.close() 하기 전에 꼭 bw.flush()를 하여 출력하고 스트림을 비워준다.
◽ 속도 비교
- 1번 풀이 :
- 2번 풀이 :
단순한 한 문장 출력이여서 System.out.print() 방식이 좀 더 빠르다.
하지만 입출력의 횟수가 많아지거나 복잡해질수록 BufferedWriter을 사용한 방식이 좀 더 빨라진다.
3. 참고
출력 속도는 알고리즘에서 풀이 시간에 영향을 주기 때문에 알아두는 것이 좋다.
백준에서 출력 속도 비교하는 게시글이 있길래 참고하자면 (주소: https://www.acmicpc.net/blog/view/57)
<자바에서 출력 속도 순위>
순위 | 출력 방법 | 초 |
1 | BufferedWriter bf bf.write(i + "\n"); |
0.9581 |
2 | StringBuilder를 이용해 문자열 하나로 만든 다음 System.out.println(sb); |
1.1881 |
3 | BufferedWriter bf bf.write(Integer.toString(i)); bf.newLine(); |
1.2556 |
4 | PrintWriter | 1.954 |
5 | System.out.println(i); | 30.013 |
BufferedWriter과 System.out.println()의 속도차이가 약 30배정도 나는걸 알 수 있다.
그러므로 두가지 방법을 모두 익혀두는 것이 좋다.
이외에도 StringBuilder 등의 입출력 방식을 이용하여 풀 수 있다.