profile image

L o a d i n g . . .

 

https://www.acmicpc.net/problem/15552


import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int testCase = Integer.parseInt(bf.readLine());
        
        for (int plusLoop = 0; plusLoop < testCase; plusLoop++) {
            String str = bf.readLine();
            int numA = Integer.parseInt(str.split(" ")[0]);
            int numB = Integer.parseInt(str.split(" ")[1]);
            
            bw.write(numA + numB + "\n");
        }
        
        bw.flush();
    }
}

주의할 점

  1. 시간제한은 1.5초, 즉 1500ms 이내여야 함
  2. Scanner 사용하면 시간 초과 (Scanner는 키보드의 입력이 키를 누르는 즉시 바로 전달되지만, 버퍼는 모아두거나 개행 문자가 나타나면 버퍼의 내용을 한 번에 전송해서 빠름)
  3. System.out.println() 도 사용하면 시간 초과 (호출횟수 증가로 인함)

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int testCase = Integer.parseInt(bf.readLine());

BufferedReader, BufferedWriter를 사용하려면 IOException을 사용해야 합니다.

 

테스트 케이스 값인 T는 최대 1,000,000개 라고 했으니 입력 받는 줄 전체를 읽어서 정수로 변환하는 작업이 필요하므로 int 타입을 사용해야 합니다.

입력 받는 줄 전체를 readLine()으로 받아오는데, String 타입으로 받아오기 때문에 Integer.ParseInt()로 숫자 변환을 합니다. 이후 testCase에 대입합니다.

 

        for (int plusLoop = 0; plusLoop < testCase; plusLoop++) {
            String str = bf.readLine();
            int numA = Integer.parseInt(str.split(" ")[0]);
            int numB = Integer.parseInt(str.split(" ")[1]);
            
            bw.write(numA + numB + "\n");
        }
        
        bw.flush();
    }

테스트케이스에 입력된 수만큼 반복합니다. bf.readLine()을 이용하여 사용자로부터 A+B을 할 숫자를 입력 받습니다.

사용자가 1 1 과 같이 입력을 하는데, 우리 눈에는 숫자 띄어쓰기 숫자로 보이지만 컴퓨터 입장에서는 숫자가 나열된 문자열로 보이기 때문에 String 타입 변수로 받습니다.

 

split() 은 특정 문자를 기준으로 문자열을 나누어 배열에 저장하는 함수입니다. " " 가 기준이 되었으므로 띄어쓰기가 나온다면 문자열을 나눈다는 뜻이고, 나눈 것의 첫 번째 값 ([0])을 numA에 저장하고, 두 번째 값 ([1])을 numB에 저장합니다.

 

bw.write()는 매개변수가 int형일 때는 char형으로 출력하지만 매개변수가 String일 때는 String 타입으로 출력합니다.

그래서 A+B 자체를 String형으로 변환해주거나, A + B + "\n" 을 붙여주면서 문자열로 바꾸어주면 문제에서 원하는 대로 출력이 됩니다.

 

이후 남아있는 값을 flush()를 이용하여 모두 출력합니다.


참고

1. https://velog.io/@jkh9615/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-15552-%EB%B9%A0%EB%A5%B8-AB-Java

2. https://www.acmicpc.net/board/view/101636

복사했습니다!