Java로 코딩테스트를 칠 때,
느리다고 유명한 Scanner보다 BufferedReader를 쓰라는 말이 있다.
지금까지는 나는 Scanner를 사용했었다. 왜냐하면,
직접적으로 BufferedReader의 필요를 느끼는 순간이 금방 올 거라고 생각했고,
그 순간에 BufferedReader의 효과를 직접 느끼면서 Scanner -> BufferedReader로 갈아끼우고 싶어서이다.
이번에 그 순간이 왔다!
이 문제를 풀면서다. BOJ2448
이 문제의 입출력 특징 :
입력 : 맨 처음에 정수 하나만 들어온다.
출력 : matrix의 모든 내용물을 for문을 돌며 출력해줘야 한다.
첫 시도에서는 여기서 System.out.print()를 사용해주었는데, 시간 초과를 만났다.
그래서 print대신에 BufferedWriter로 갈아끼워줬다. 시간 초과를 피할 수 있었다.
for문을 돌며 출력해줘야 하는 배열의 크기가 최대 char[3072][6143]이 나오는 문제다.
System.out.print()를 BufferedReader의 write()로 변경해주니까 시간초과 문제가 해결되었다.
모든 matrix를 돌며 출력해야 하는 문제라서 for문을 더이상 줄이는 것은 불가능하다고 판단했다.
그래서 print문을 BufferedReader로 바꿔주었다.
BufferedReader/Writer에 대한 블로그 글:
소스 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.IOException;
public class Main{
// int maxN = 3 * (int)Math.pow(2, 10);
// int maxSize = (maxN/3) * 5 + (maxN/3-1);
public static char[][] matrix = new char[3072][6143];
public static void drawTriangle(int x, int y, int length){
if (length == 3){
matrix[y][x+2] = '*';
matrix[y+1][x+1] = '*';
matrix[y+1][x+3] = '*';
for (int i = 0; i < 5; i++)
matrix[y+2][x+i] = '*';
return;
}
int half = length / 2;
drawTriangle(x + half, y, half);
drawTriangle(x, y + half, half);
drawTriangle(x + length, y+half, half);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int length = Integer.parseInt(br.readLine());
for (int i = 0; i < length; i++){
for (int j = 0; j < 2*length - 1 ; j++)
matrix[i][j] = ' ';
}
drawTriangle(0, 0, length);
for (int i = 0; i < length; i++){
for (int j = 0; j < 2*length - 1 ; j++)
bw.write(matrix[i][j]);
bw.newLine();
}
br.close();
bw.flush();
bw.close();
}
}
반응형
'JAVA' 카테고리의 다른 글
오버라이딩 반환타입 불일치? 상속관계면 반환타입이 달라도 된다 (0) | 2022.07.19 |
---|---|
실전 JAVA 소프트웨어 개발 | 입출금 내역 분석기 확장 실습하기 (0) | 2022.04.06 |
실전 Java 소프트웨어 개발 | 입출금 내역 분석기 실습하기 (0) | 2022.03.26 |
열거 타입, 열거 상수란? | 열거타입(enum) 변수 | enum, enumeration type (0) | 2021.07.03 |
클래스의 정렬(대소판정)기준 | comparable, compareTo, comparator, compare | 자연정렬(natural ordering) (0) | 2021.06.28 |