반응형
1. BufferedReader + println 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// [입력] 100,000보다 작거나 같은 자연수 N
int n = Integer.parseInt(br.readLine());
// [출력] 첫째 줄부터 N번째 줄 까지 차례대로 출력한다.
for (int i = 1; i <= n; i++) {
System.out.println(i);
}
}
}
2. BufferedReader + BufferedWriter
생각해 보니, 입력은 1개인데, 출력은 1~100,000개이므로, 출력에서 시간을 많이 잡아먹어 개선해 보았습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// [입력] 100,000보다 작거나 같은 자연수 N
int n = Integer.parseInt(br.readLine());
br.close();
// [출력] 첫째 줄부터 N번째 줄 까지 차례대로 출력한다.
for (int i = 1; i <= n; i++) {
bw.write(i + "\n"); // 출력량이 많아 println에서 수정
}
bw.flush();
bw.close();
}
}
3. 개행 수정
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// [입력] 100,000보다 작거나 같은 자연수 N
int n = Integer.parseInt(br.readLine());
br.close();
// [출력] 첫째 줄부터 N번째 줄 까지 차례대로 출력한다.
for (int i = 1; i <= n; i++) {
bw.write(String.valueOf(i)); // 출력량이 많아 println에서 수정
bw.newLine(); // int + string 형변환 제거 (+ \n)
}
bw.flush();
bw.close();
}
}
bw.write(i + "\n"); => bw.write(String.valueOf(i)); 먼저 형변환 처리 후 bw.newLine(); // 개행처리
정확하게 아직 3번으로는 왜 개선되는지 모르겠습니다. 2번 이상 해봤는데 비슷하게 나오네요,, 1회성은 아닌 듯
추측으로는, 매 반복문마다 형변환 + 개행처리까지 결합연산이 1번 더 실행되어서 그렇지 않을까? 생각..
아니면 이미 메모리가 알고 있는 newLine() 메서드를 사용해서..?
ex) 형변환 + 개행문자 결합 => 형변환 / 개행처리
성능개선
시간 : 956 ms -> 284 ms -> 228 ms
메모리 : 28,752 KB -> 21,300 KB -> 20,564KB
반응형