반응형

다시 알고리즘을 공부하면서, 이번에는 파이썬(Python)이 아닌 자바(Java)로 풀어보고 싶어서 이렇게 기록한다. 그 전에 코딩테스트를 볼 때 항상 파이썬으로 봤었다. 솔직히 자바보다 파이썬으로 더 간결하고 쉽게 풀 수 있는 라이브러리들도 많아서 사용했는데, 이제는 자바도 공부를 하고 싶었다.


1. 입출력

1) Scanner 대신 BufferedReader를 사용하기(속도 측면 향상)

Scanner와 BufferedReader의 큰 차이점은 바로 버퍼 사이즈다. Scanner 같은 경우에는 버퍼의 사이즈가 1KB지만, BufferedReader의 버퍼 사이즈는 8KB다. 즉, 8KB 데이터를 읽는다고 가정을 했을 때, Scanner는 1KB씩 8번을 전달할 것이고, BufferedReader는 한 번에 담아 1번만 전달한다. 그래서 속도 차이가 난다.

 

i) String형으로 입력값 받기

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputData = br.readLine();
br.close();

 

ii) int형으로 입력값 받기

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputData = Integer.parseInt(br.readLine());
br.close();

 

2) System.out.println() 대신 BufferedWriter를 사용하기(속도 측면 향상)

System,out.println()은 속도와 리소스를 많이 잡아먹기 때문에 BufferedWriter를 사용하는게 좋다.

 

i) BufferedWriter 예제

String inputData = "abcde";

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(inputData);
bw.flush();
bw.close();

 

3) 공백으로 입력이 이루어진 입력값 분리하는 방법

백준에서 공백으로 이루어진 입력값이 있을 때, 토크나이저를 써도 되지만, 아래와 같은 방법은 일반적인 방법이다. 1줄을 읽어 split을 통해 배열에 담아 사용할 수 있다.

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String[] inputList = br.readLine().split(" ");
		
		for(int i = 0; i < inputList.length; i++) {
			bw.write(inputList[i]);
		}
		
		bw.flush(); //abcde 출력
		bw.close();
	}
}

2022년 8월 7일 v1.0 작성

반응형

'알고리즘' 카테고리의 다른 글

반복문과 재귀의 차이점  (0) 2021.02.07
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기