https://www.acmicpc.net/problem/15552
정답
import java.io.IOException;
import java.io.BufferedReader;
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();
int n =Integer.parseInt(str);
int sum =0;
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for(int i = 1; i<=n;i++){
st = new StringTokenizer(br.readLine(), " ");
sum =Integer.parseInt(st.nextToken()) +Integer.parseInt(st.nextToken());
sb.append(sum);
sb.append('\n');
}
System.out.println(sb);
}
}
풀이
import java.io.IOException;
import java.io.BufferedReader;
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();
int n =Integer.parseInt(str);
int sum =0;
StringTokenizer st;
for(int i = 1; i<=n;i++){
st = new StringTokenizer(br.readLine(), " ");
sum =Integer.parseInt(st.nextToken()) +Integer.parseInt(st.nextToken());
System.out.println(sum);
}
}
}
- System.out.print의 경우, 각 테스트 케이스마다 해주면 속도가 느려 시간초과 나올수 있다
- 해결책 두가지
- StringBuilder로 하나의 문자열로 계속 연결시킨 뒤 가장 마지막에 연결된 하나의 문자열을 출력시키는 방법
- BufferedWriter로 버퍼에 담아둬았다가 한번에 데이터를 보내는 방법
Scanner를 사용하면 안풀리는 이유
- Scanner 자체가 reqular expression, 즉 정규식 때문이다.
- Scanner 사용자 입장에서 편리한 점은 있겠지만
알고리즘에서는 사용자가 직접 필요에 따라 파싱(parsing) 하는게 더욱 빠르기 때문에 BufferedReader을 쓰게 되는 것이다. - Scanner 자체가 입력을 받으면 구문분석을 위해 정규식을 거치게 되고
BufferedReader은 그런 특별한 구문분석이 없어서 속도차이가 발생 한다
- 위에 사진에 있는 모두 검사하고 return 하기 때문에 사실상 시간이 많이 소요될 수 밖에 없다
그에 반해 BufferedReader은 검사하지 않는다.
'JAVA > 백준' 카테고리의 다른 글
[Java11] 11022번 : A+B -8 (0) | 2024.09.11 |
---|---|
[Java11] 11021번 : A+B -7 (0) | 2024.09.11 |
[Java11] 25314번 : 코딩은 체육과목 입니다. (0) | 2024.09.11 |
[Java11] 25304번 : 영수증 (0) | 2024.09.11 |
[Java11] 8393번 : 합 (1) | 2024.09.11 |