ejyoo's 개발 노트

2557번 : Hello World 출력하기 본문

문제풀이/백준 입출력과 사칙연산

2557번 : Hello World 출력하기

ejyoovV 2021. 3. 3. 10:42

👉🏻방법1)

가장 기초적인 방법의 소스는 System 클래스의 표준 입출력이다.

public class Main {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

👉🏻방법2)

BufferedWriter를 사용하는 것이다.

BufferedWriter / bufferedReader는 buffer에 잇는 IO 클래스인데 이 클래스들은 데이터들을 하나씩 읽어오는 것이 아니라 임시공간(버퍼)에 저장해두었다가 한번에 출ㄺ 또는 데이터를 보내는 방식이다.

즉, 예를 들어 1000개의 데이터를 1개씩 보내는게 아니라 임시로 한 공간에 담아둔 뒤 한 번에 보내는 방법이니 당연 성능면에서 우수하다.

(속도가 빠르다고 이해하면 빠르다.물론 빠른 이유가 이뿐만이 아니다.)

특히 Scanner는 BufferedReader보다 상당히 느린데, 이게 나중에 문제 풀이도중 시간 초과로 통과되지 못하는 상황이 발생되기도 한다.

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

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();	
	}
}

👉🏻방법3) StringBuilder를 이용하는 방법이다.

이또한 BufferedWriter와 유사하게 데이터를 모아두었다가 한번에 출력한다. 특히나 문자열을 조작할 때 매우 유용하다.

특징이 있다면 StringBuilder에서 문자열을 이어 붙인다는 점이다.

public class Main {
	public static void main(String[] args){
		StringBuilder sb =new StringBuilder();
		sb.append("Hello World!");
		
		System.out.println(sb);
	}
}

👉🏻방법4) StringBuilder랑 거의 비슷하다! 다만 StringBuilder와 차이점이 있다면 Stringbuffer는 동기화를 지원한다는 점.

즉 multi-Thread 상황에서 문자열이 리소스로 사용된다면 Stringbuffer를 사용해주어야 한다.(StringBuilder는 동기화를 지원하지 않는다.)

아무래도 동기화를 지원하다 보니 StringBuilder 보단 느리지만 그래도 문자열 조작에 있어 String 보다 훨씬 빠르다.

public class Main {
	public static void main(String[] args){
		StringBuffer sb = new StringBuffer();
		
		sb.append("Hello World!");
		
		System.out.println(sb);
	}
}

😍 정리

앞으로 문제를 해결하는데 있어 많이 사용되는 출력 방법들이다.

물론 이번 문제처럼 데이터 양, 테스트 양이 적은 경우에는 별로 차이가 없지만 데이터 양이 많아지면 많아질수록 System.out.println() 같은 표준 입출력은 하나씩 출력하기에 속도 저하 및 시간 초과로 문제를 해결 못할 수도 잇다.

'문제풀이 > 백준 입출력과 사칙연산' 카테고리의 다른 글

10718번 : We love kriii  (0) 2021.03.03
10171번 : 고양이  (0) 2021.03.03
10172번 : 개  (0) 2021.03.03
1000번 : A+B  (0) 2021.03.03
1001번 : A-B  (0) 2021.03.03