반응형
백준 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)
각 언어별로 대량 입출력 상황에서 대응하는 방법을 살펴보았습니다.
자세한 설명은 추후 포스팅을 하겠습니다.
반응형
'IT 이야기 > 알고리즘' 카테고리의 다른 글
최소, 최대 값 찾는 가장 빠른 알고리즘 C++ / Java / 파이썬 (0) | 2023.01.13 |
---|---|
숫자 카운팅 알고리즘 C++ / Java / 파이썬 시간복잡도 (0) | 2023.01.13 |
C++ / Java / 파이썬 반복문 문법 코딩 방법 (2) | 2023.01.11 |
C++ / Java / 파이썬 그레고리력 윤년 계산 (0) | 2023.01.10 |
알고리즘 두 수 크기 비교 조건문 C++ / Java / 파이썬 (0) | 2023.01.10 |