시간제한을 처음 걸려본 뒤 푼 첫 문제다.
시험삼아 Scanner 와 System.out.println()을 활용해서 풀어봤는데 제한에 걸리지 않았다.
그래도 BufferedReader와는 얼마나 차이가 나는 것인지 비교를 해보고 싶어져서
BufferedReader/BufferedWirter를 활용해서 다시 풀어보고 메모리와 시간을 비교해보기로 했다.
먼저 Scanner&System.out.println() 으로 풀이한 결과다
1
2
3
4
5
6
7
8
9
10
11
12
|
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
for(int i = 1; i <= num; i++) {
System.out.println(i);
}
scan.close();
}
}
|
cs |
다음은 BufferedReader&BufferedWriter 로 풀이한 결과다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
try{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
int num = Integer.parseInt(bf.readLine());
StringBuffer str = new StringBuffer();
for(int i = 1; i <= num; i++) {
str.append(i+"\n");
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(str+"");
bw.flush();
bw.close();
bf.close();
}catch (IOException e) {
e.printStackTrace();
}
}
}
|
cs |
Scanner, System.out.println()을 사용한 결과를 100%라고 했을 때,
BufferedReader, BufferedWriter를 사용한 결과는 다음과 같다
97%의 메모리 사용 | 31%의 소요시간 | 170%의 코드 길이
코드 길이는 길어졌지만 소요시간은 1/3 수준으로 줄어들었고 메모리도 절약됐다.
지금까지는 자바 언어를 공부하며 이해와 응용, 결과에만 집중했다면
앞으로는 더 나은 프로그래밍을 위한 요소로
메모리 활용, 처리속도 또한 함께 고려할 수 있게 될 것 같다.
https://www.acmicpc.net/problem/2741
'Algorithm' 카테고리의 다른 글
K번째 수 (프로그래머스, Java, Level1) (0) | 2020.07.07 |
---|---|
Selection Sort 구현해보기 (0) | 2020.07.06 |
더하기 사이클 : 백준 1110번 - charAt, length()를 통한 문자열 재구성 (0) | 2020.06.09 |
빠른 A+B : 백준 15552번 - BufferedReader/Writer를 활용한 빠른 입출력 (0) | 2020.06.06 |
가끔씩 한 문제씩 알고리즘 문제풀이를 해보려고 한다 (2) | 2020.05.28 |