💡 백준 단계별로 하루 1문제 이상 푸는 중, 쉬울것 같아서 SKIP 했던 "반복문"에서 "빠른 A+B"라는 문제를 만났다.
해당 문제는 빠른 입출력을 위해 "Scanner" 대신 "BufferedReader"를 사용해야 하는 문제다.
속도보다 편의성을 중시하여 Scanner만 사용했었는데, 어쩔 수 없이 BufferedReader를 배우게 되었다. ㅋㅋ
여기 저기 블로그를 기웃거려도 설명이 이해가 안되더라.
그래서 그냥 문제에서 제출된 코드를 통해 익혔다.
//* 인풋
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int coinCnt = 0;
int[] coins = new int[n];
for (int i = 0; i < n; i++) {
coins[i] = Integer.parseInt(br.readLine());
}
해당 문제 JAVA 첫번째인 "znzndnjswo2" 님 입력부분 코드입니다.
감사합니다.
위 sout으로는 빠른 A + B에서 시간 초과가 뜬다. 그래서 출력도 "BufferedWriter"를 사용해보자.
public static void main(String[] args) throws IOException {
//* 인풋
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
String[] strs = br.readLine().split(" ");
int a = Integer.parseInt(strs[0]);
int b = Integer.parseInt(strs[1]);
bw.write(Integer.toString(a + b) + "\n");
}
//* 시스템
//* 아웃풋
bw.flush();
br.close();
bw.close();
}
위 코드는,
1) br, bw 인스턴스 생성
2) br.readLine();
하면 String으로 들어옴 -> int n 으로 넣기 위해 Integer.parseInt(br.readLine());
으로 입력
3) 입력이 "a b" 의 형태로 들어오는데, br은 공백으로 나눠 줘야 하니까 String[] strs = br.readLine().split(" ");
로 나눠서 받는다.
4) "a + b"를 출력하기 위해 a, b를 Integer.parseInt(strs[0]);
으로 나누어 인트로 만든다.
5) bw.write(Integer.toString(a + b) + "\n");
을 통해 버퍼에 "a+b\n" 라는 스트링을 넣는다.
6) for문 내부에서 버퍼에 다 쓴 뒤, 마지막 bw.flush();
로 버퍼에 있던 모든 데이터를 한번에 출력한다.
익숙해지고, 숙달되려면 버퍼리더 방식으로 많이 풀어봐야겠다.
끝~!🚀🚀