🌀알고리즘🌀

[백준/15552] 빠른 A+B (Kotlin)

bbooyaaa 2025. 4. 28. 17:51

코틀린으로 알고리즘 문제 처음 풀어보기 때문에 자세히 적어볼게요

앞으로는 기본적인 문법은 생략할 예정 !

 

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

 

입력

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

 

출력

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

 

예제 입력과 예제 출력

답안
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.StringTokenizer

fun main(){
    val bufferedReader = BufferedReader(InputStreamReader(System.`in`))
    val bufferedWriter = BufferedWriter(OutputStreamWriter(System.out))

    repeat(bufferedReader.readLine().toInt()){
        val str = StringTokenizer(bufferedReader.readLine())
        bufferedWriter.write((str.nextToken().toInt() + str.nextToken().toInt()).toString()+"\n")
    }
    bufferedReader.close()
    bufferedWriter.flush()
}

 

풀이

 

세부 구현 방법

  1. BufferedReader로 첫 줄을 읽고 테스트케이스 개수(T)를 저장한다.
  2. repeat(T)로 반복문을 돌면서 매 줄마다 readLine()으로 입력을 받고, StringTokenizer로 두 숫자를 분리한다.
  3. 각각 toInt()로 변환 후 더한 값을 BufferedWriter.write()로 모은다.
  4. 반복이 끝난 후 bufferedReader.close()로 입력을 닫고, bufferedWriter.flush()로 출력을 완료한다.

주의사항 및 성능 포인트

  • BufferedReader, BufferedWriter는 대량 입출력에 필수적이다. Scanner나 println을 사용하면 시간 초과가 발생할 수 있다.
  • StringTokenizer를 이용해 공백 기준으로 빠르게 문자열을 분리했다.
  • flush()는 매번 하면 느려지므로, 맨 마지막에 한 번만 해주어야 성능상 이점을 챙겼다.

 

기본 문법 정리

 

BufferedReader

- 입력 받을 때 사용

- Scanner 대신 사용

👉 Scanner는 한줄한줄 읽을 때 느리다는 단점이 있음 / BufferedReader는 메모리에 임시 저장하면서 빠르게 읽을 수 있음

👉👉 BufferedReader가 성능상 더 좋음

 

BufferedWriter

- 출력 할 때 사용 / 출력을 빠르게 모아서 한번에 내보냄

- println 대신 사용

👉 println는 한번 출력할 때마다 시스템에 요청을 보내느라 느리다는 단점이 있음 / BufferedWriter는 메모리에 출력할 걸 모아두고, 마지막에 flush()로 한번에 쏴서 빠르게 읽을 수 있음

👉👉 BufferedWriter가 성능상 더 좋음

 

InputStreamReader, OutputStreamWriter

- 시스템의 기본 입력과 출력을 읽고 쓸 수 있게 해주는 연결통로

- System.in(키보드 입력)과 System.out(콘솔 출력)을 직접 다루게 만들어주는 중간다리

 

StringTokenizer

- 한 줄에 여러 숫자가 있을 때, 띄어쓰기(공백) 기준으로 잘라주는 도구

- split("") 대신 사용

👉 StringTokenizer는 메모리 사용량이 적고 빠른 편

👉👉 성능상 더 좋음