-
[백준] 11021번 _ A+B - 7 (자바)[ DEV ] Backend/[백준] 브론즈 마스터하기 2022. 6. 30. 21:22
https://www.acmicpc.net/problem/11021
11021번: A+B - 7
각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.
www.acmicpc.net
1. Scanner 풀이법
import java.util.Scanner; public class num11021_Scanner { public static void main(String[] args){ Scanner in = new Scanner(System.in); int T = in.nextInt(); int i = 1; for(i=1 ; i<=T ; i++){ int a = in.nextInt(); int b = in.nextInt(); System.out.println("Case #" + i + ": " + (a+b)); } in.close(); } }
2. BufferedReader 풀이법
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class num11021 { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String T = br.readLine(); int i = 0; for(i=T; i<=T; i++){ String A = br.readLine(); String B = br.readLine(); System.out.println("Case #"+i +": "+A+B); } br.close(); } }
아직 BufferedReader에 익숙하지 않아서 일단 혼자 여기까지는 풀어보았다.
그리고 아래 블로그 풀이법을 찾아보며 코드를 고쳤다.
(거의 다 틀림 ㅠ)
우선 내가 또 까먹은 포인트는 아래와 같다.
readLine() 은 한 행을 전부 읽기 때문에 공백단위로 입력해 준 문자열을 공백단위로 분리해주어야 문제를 풀 수 있다는 점.
문자열 분리를 위해서 StringTokenizer 을 사용해 주어야 한다는 점.
*여기서 잠깐! StringTokenizer 클래스란??
BufferedReader 클래스의 매서드로 입력을 읽어들이면, 라인 단위로 읽어들일 수 밖에 없는데, 그런 경우 문자에 따라서 문자열을 나누고 싶을 때 사용하는 클래스라고 보면 된다. 한마디로 하나의 문자열을 여러개의 토큰으로 분리하는 클래스라고 보면 된다.
String : 문자열을
Tokenizer : 토큰화한다.
라고 해셕할 수 있다. (토큰은 분리된 문자열 조각열을 의미)
StringTokenizer에 대한 자세한 설명은 아래 블로그에 잘 나와있다.
https://jhnyang.tistory.com/398
[JAVA 자바] StringTokenizer 클래스로 문자열 분리하기! split 비교.
안녕하세요 양햄찌 블로그 주인장입니다. 저번시간에는 split 함수를 이용해서 문자열을 나누는 방식을 알아봤는데요. 혹시 해당 포스팅이 궁금하신 분은 아래 링크를 참고해주세요 ▼ 자바 SPLIT
jhnyang.tistory.com
그리고 반드시 자료형 타입을 잘 보아야 한다.
StringTokenizer은 int형으로는 바로 저장이 안되기 때문.
nextToken()으로 끊으면 String 타입이기에 형변환을 해줘야 한다.
=> Integer.parseInt()로 int 형으로 변환시켜주기!!!!
import java.io.*; import java.util.*; public class num11021 { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); StringTokenizer st; for(int i= 1; i<=T; i++){ st= new StringTokenizer(br.readLine()," "); int A =Integer.parseInt(st.nextToken()); int B =Integer.parseInt(st.nextToken()); int sum = A+B; System.out.println("Case #" + i + ": " + sum); } br.close(); } }
최종풀이는 이렇게 된다.
확실히 BufferedReader 로 풀면 시간이 줄어드는 것을 확인 할 수 있다.
'[ DEV ] Backend > [백준] 브론즈 마스터하기' 카테고리의 다른 글
[백준] 2438번 _ 별 찍기 - 1 (자바) (0) 2022.07.03 [백준] 10172번 _ 개 (자바) (0) 2022.06.30 [백준] 2742번 _ 기찍 N (자바) (0) 2022.06.30 [백준] 2741번 _ N 찍기 (자바) (0) 2022.06.30 백준 컴파일 에러 해결법 (자바) (0) 2022.06.30