백준 1000번 문제의 입력 부분을 Scanner와 BufferedReader 두 가지 방법을 사용하여 코드 효율을 비교해보았다.
사칙연산 문제는 언제나 반갑다.
입력 받은 두 정수의 합을 구하는 문제이다.
지금까지 문자를 입력 받을 때 일반적으로 Scanner를 사용해왔다.
하지만 효율을 중시하는 코딩테스트에서는 BufferedReader라는 것을 쓰더라.
(혹시 BufferedReader와 Scanner의 사용법, 차이를 모른다면 지난 글 참고하시면 좋을 것 같아요)
2022.01.19 - [JAVA] - [JAVA] Scanner와 BufferedReader
먼저 Scanner를 사용한 코드를 보자.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a+b);
in.close();
}
}
다음으로 BufferedReader를 사용했다.
1) split() 활용
split()으로 공백을 기준으로 문자열을 나누어 배열에 저장한다.
저장된 배열에서 첫 번째 요소(인덱스 0번)부터 int형으로 변환하여 변수에 저장한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] ab = str.split(" ");
int a = Integer.parseInt(ab[0]);
int b = Integer.parseInt(ab[1]);
System.out.println(a+b);
}
}
2) StringTokenizer 활용
StringTokenizer 객체를 생성하여 공백(기본 구분자)을 기준으로 문자열을 나누어 저장한다.
nextToken() 다음으로 존재하는 토큰을 리턴한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println(a+b);
}
}
메모리 | 시간 | 코드 길이 | |
Scanner | 17756KB | 220ms | 267B |
StringTokenizer + split | 14292KB | 128ms | 466B |
StringTokenizer + nextToken | 14216KB | 136ms | 471B |
[출처]
https://www.acmicpc.net/problem/1000
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 8958번 OX퀴즈 (0) | 2022.01.24 |
---|---|
[BAEKJOON] 1152번 단어의 개수 (0) | 2022.01.24 |
[BAEKJOON] 15596번 정수 N개의 합 (0) | 2022.01.24 |
[BAEKJOON] 1009번 분산 처리 (0) | 2022.01.24 |
[BAEKJOON] 2753번 윤년 (0) | 2022.01.24 |
댓글