본문 바로가기
IT 이야기/알고리즘

C++ / Java / 파이썬 빠른 입출력 알고리즘 대회

by youngmap 2023. 1. 11.
반응형

백준 15552번 : 빠른 A+B 를 풀면서 각 언어별로 빠른 입출력을 활용하는 방법을 알아봅시다.

 

알고리즘 대회에서는 조금이라도 빠르게 입력받고 빠르게 출력해야 합니다.

 

문제는 간단하지만, 입출력 값의 양이 많아서 빠른 입출력을 사용하는 문제입니다.

 

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

 

15552번: 빠른 A+B

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

www.acmicpc.net

 

테스트케이스 T가 최대 100만개 입니다.

그래서 입력 출력 방식을 효율적으로 수행해야 시간초과가 나지 않습니다.

다행히 문제에서 언어에 따른 가이드가 제시됩니다.

 

1. C++

문제에서 시키는 대로 옵션값을 주었습니다.

이 옵션이 무엇을 의미하는지 상세한 설명은 추후 다른 포스팅에서 이야기 해 보겠습니다.

#include <iostream>
using namespace std;
int main(void)
{
	int T, A, B;

	cin.tie(NULL);
	ios::sync_with_stdio(false);

	cin >> T;
	for (int i = 0; i < T; i++){
		cin >> A >> B;
		cout << A + B << "\n";
	}
	return 0;
}

 

2. JAVA

자바에서는 BufferedReader와 BufferedWriter를 사용하여 입출력 속도를 높혔습니다.

마지막에 flush()를 하면 버퍼에 쌓였던 값들이 출력됩니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
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));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int T = Integer.parseInt(st.nextToken());
		
		int A = 0;
		int B = 0;
		
		for(int i = 0; i < T; i++) {
			st = new StringTokenizer(br.readLine());
			A = Integer.parseInt(st.nextToken());
			B = Integer.parseInt(st.nextToken());
			bw.append((A + B) + "\n");
		}
		bw.flush();
	}
}

 

3. Python 파이썬

파이썬 소스는 항상 간결하고 재미있습니다.

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

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

 

각 언어별로 대량 입출력 상황에서 대응하는 방법을 살펴보았습니다.

자세한 설명은 추후 포스팅을 하겠습니다.

반응형