codeup 문제를 풀다가 Scanner 사용해서 풀었더니 시간초과 나서 BufferReader를 알아보았다.
빨강(red), 초록(green), 파랑(blue) 빛을 섞어
여러 가지 빛의 색을 만들어 내려고 한다.
빨강(r), 초록(g), 파랑(b) 각각의 빛의 개수가 주어질 때,
(빛의 강약에 따라 0 ~ n-1 까지 n가지의 빛 색깔을 만들 수 있다.)
주어진 rgb 빛들을 다르게 섞어 만들 수 있는 모든 경우의 조합(r g b)과
총 가짓 수를 계산해보자.
빨녹파(r, g, b) 각 빛의 강약에 따른 가짓수(0 ~ 128))가 공백을 사이에 두고 입력된다.
예를 들어, 3 3 3 은 각 색깔 빛에 대해서 그 강약에 따라 0~2까지 3가지의 색이 있음을 의미한다.
만들 수 있는 rgb 색의 정보를 오름차순(계단을 올라가는 순, 12345... abcde..., 가나다라마...)으로
줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력한다.
import java.util.Scanner;
public class CodeUp1084 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int count=0;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
for (int k = 0; k < c; k++) {
System.out.printf("%d %d %d\n",i,j,k);
count++;
}
}
}
System.out.printf("%d",count);
}
}
import java.io.*;
import java.util.Scanner;
public class CodeUp1084 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] strArr = str.split(" ");
int a = Integer.parseInt(strArr[0]);
int b = Integer.parseInt(strArr[1]);
int c = Integer.parseInt(strArr[2]);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int count=0;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
for (int k = 0; k < c; k++) {
bw.write(i + " " + j + " " + k + "\n");
count++;
}
}
}
bw.write(String.valueOf(count));
bw.flush();
}
}
BufferedReader를 사용할때와 Scanner의 속도가 차이가 나는 이유는 buffer 사용 여부
Scanner는 1KB 크기의 버퍼를 갖기 때문에 입력이 바로 전달되는 반면 BufferedReader는 8KB 크기의 버퍼를 가져 buffer에 입력들을 저장하였다 한 번에 전송하기 때문에 속도가 더 빠르다.
백준님이 작성하신 입력 속도 비교 글을 보면 평균적으로 BufferedReader 사용시에 0.6585, Scanner 사용시에 4.8448 초가 걸리는 차이가 있는데 적은 양의 데이터인 경우 문제가 없겠지만, 데이터 양이 많아질수록 성능 차이는 더 커진다.