[BAEKJOON] 반복문 15552번 - 빠른 A+B

밍챠코·2024년 3월 24일
0

BAEKJOON

목록 보기
24/38

📝[15552]

[Java]

※ 시간 제한 = 1.5초(1500ms)
Scanner와 System.out.println 사용하면 시간초과!

🔎 System.out.println()을 사용하면 안되는 이유?
→ 테스트 케이스가 많아질수록(max 100만개) System.out.println()의 호출 횟수 또한 증가, BufferedReader를 사용하더라도 각 테스트 케이스마다 System.out.println()를 호출한다면 시간이 초과됨

※ 방법1. BufferedWriter를 사용하여 버퍼에 데이터를 담아뒀다가 한번에 출력
※ 방법2. StringBuilder를 사용하여 하나의 문자열로 계속 연결시킨 후 출력

1. BufferedReader/BufferedWriter 이용 (빠른 입출력)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main{
    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 T = Integer.parseInt(br.readLine());
        
        for(int i=0; i<T; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());
           
            bw.write(A + B + "\n");
        }
        br.close();
        
        bw.flush();
        bw.close();
    }
}

bw.write(); → 버퍼에 데이터 입력(저장)
bw.flush(); → 버퍼에 있는 데이터 모두 출력

2. BufferedReader/StringBuilder 이용

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int T = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<T; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());
           
            sb.append(A + B).append("\n");
        }
        System.out.print(sb);
        
        br.close();
    }
}

[Javascript]

※ node.js에서의 시간 초과 해결

1. fs 모듈 사용

→ readline 모듈은 fs 모듈에 비해 소요시간이 더 많이 걸림

2. 결과값을 하나로 뭉쳐서 출력

→ console.log() 호출 횟수가 많아질수록 실행 소요 시간 또한 길어지기 때문에 하나의 변수에 결과값을 모두 저장한 후, 한 번에 출력해주는 방식을 사용

const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n");
const T = Number(input[0]);

let str = ""; // 변수 선언 시 초기값 지정, 지정해주지 않을 시 Undefined 

for(let i=1; i<=T; i++){
    let [A, B] = input[i].split(" ").map(Number);
    str += A + B + "\n";
}

console.log(str);

[Python]

※ input() 대신 sys.stdin.readline() 사용

🔎 stdin(standard input의 약자)

  • stdin을 사용하려면 sys 모듈 import 필요
  • input 대비 빠른 속도와 효율적인 메모리 공간
import sys # sys모듈 읽어오기

T = int(sys.stdin.readline())

for i in range(T):
    A, B = map(int, sys.stdin.readline().split())
    print(A+B)

0개의 댓글