본문 바로가기

problem solving/baekjoon

java/ 백준 15552 빠른 A+B

 

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

문제

본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
Java를 사용하고 있다면, ScannerSystem.out.println 대신 BufferedReaderBufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

입력

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

출력

각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다. 


코드

 

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {     
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

        int testcase = Integer.parseInt(reader.readLine());

        for(int i=0; i<testcase; i++){
        StringTokenizer st = new StringTokenizer(reader.readLine(), " ");
        writer.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())+"\n"));
        }
        
        writer.flush();
        writer.close();
    }
}

 


전체적인 흐름

 

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

 

콘솔을 통해 입출력을 받기 위해서 (new InputStreamReader(System.in)), (new OutputStreamWriter(System.out))로 BufferedReader와 BufferedWriter를 초기화한다.

 

int testcase = Integer.parseInt(reader.readLine());

 

콘솔을 통해 테스트케이스로 입력받은 reader.readLine() 값을 변수 testcase에 저장한다. 여기서 주의할 점은 BufferedReader는 String 타입으로 입력받기 때문에 int 값으로 저장하기 위해서는 Integer.parseInt(reader.readLine())로 받아야 한다.

 

for(int i=0; i<testcase; i++){
    StringTokenizer st = new StringTokenizer(reader.readLine(), " ");
    writer.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())+"\n"));
}

 

for문을 통해 입력받은 테스트케이스 개수만큼 더할 수를 입력받아 덧셈 연산을 수행한다.

 

StringTokenizer st = new StringTokenizer(reader.readLine(), " ");

 

여기서 BufferedReader를 통해 입력받은 값은 String 타입이라 덧셈 연산 시 문자열의 결합으로 처리된다는 문제점이 있다. 때문에 먼저 StringTokenizer 클래스를 통해 입력받은 문자열 reader.readLine()을 " " 단위로 쪼개어 StringTokenizer 객체에 저장한다(입력 받을 때 " "로 두 수를 받았기 때문에 가능하다).

 

writer.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())+"\n"));

 

그리고 쪼개진 토큰을 nextToken() 메서드를 이용해 차례로 토큰을 읽고, Integer.parseInt() 메서드를 통해 int 타입으로 변환하고, Bufferedwriter의 write() 메서드를 이용해 출력하도록 한다.

 

writer.flush();
writer.close();

 

출력을 위해 flush() 메서드를 호출하고 닫아준다.


 

더보기

(Code reference)

 

[백준] 15552번 : 빠른 A+B - JAVA [자바]

https://www.acmicpc.net/problem/15552 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다...

st-lab.tistory.com

(BufferedReader reference)

 

Ways to read input from console in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

Java.io.BufferedReader Class in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

8 Difference between BufferedReader and Scanner in Java With Example | Java Hungry

DataTyperead String onlyread String as well as primitive data type

javahungry.blogspot.com

(BufferedWriter reference)

 

Java.io.BufferedWriter class methods in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

(flush reference)

 

What is the purpose of flush() in Java streams?

In Java, flush() method is used in streams. But I don't understand what are all the purpose of using this method? fin.flush(); tell me some suggestions.

stackoverflow.com

 

(StringTokenizer)

 

05/04/22 [1/2] [Java] 자바 자바 자바 기초 떼기

Java 1. 운영체제에 독립적이다 JRE(Java Runtime Environment: JVA; Java Virtual Machine + 표준 클래스 라이브러리)가 설치되어 있는 모든 운영체제에서 실행 가능하다 이전의 언어: 특정 cpu에서만 작동하거나..

romcanrom.tistory.com

며칠 전에 공부한 내용 까먹기 전에 바로 써먹었다 최고

 

'problem solving > baekjoon' 카테고리의 다른 글

java/ 백준 11286 절댓값 힙  (0) 2022.07.21
java/ 백준 5622 다이얼  (0) 2022.05.15
java/ 백준 2577 숫자의 개수  (0) 2022.05.09