[PS] python/cpp/JS/Rust 빠른 입출력

[PS] python/cpp/JS/Rust 빠른 입출력

태그
python
cpp
js
rust
ps
생성 일시
Dec 28, 2023 11:44 AM
최종 편집 일시
Last updated February 1, 2024
Date

빠른 입출력?

대량의 입출력이 발생하는 경우, 내가 훌륭한 로직을 구성해도 입출력에서 시간이 초과되는 경우가 적지 않다. 이는 알고리즘의 효율성뿐만 아니라 입출력 처리 방식의 최적화가 필요함을 의미한다. 일반적으로, 입출력 최적화를 위해 사용되는 기법은 프로그래밍 언어 및 환경에 따라 다른데, Python에서는 입출력 속도를 높이기 위해 sys.stdin.readline()을 사용할 수 있으며, C++에서는 ios_base::sync_with_stdio(0); cin.tie(0); 같은 코드를 사용하여 입출력 속도를 향상시킬 수 있다. 직접 체험해 보고 싶다면 아래 문제를 풀어보자.
 
아래는 각 언어별 빠른 입출력 방법을 요약한 자료로 위 문제의 풀이가 아닙니다.

Python

import sys n = int(sys.stdin.readline().strip()) sys.stdout.write(f"{n}\n")

C++

#include<iostream> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> ... // anything you want cout << ... << '\n'; // don't use endl }

JS

input.txt
1 2
your.js file
let fs = require('fs'); let input = fs.readFileSync('/dev/stdin').toString().split((/ |\n/)).map(Number); let input_iterator = input[Symbol.iterator](); function next() { return input_iterator.next().value; } let num = next(); let num2 = next(); console.log(num, num2);
how to run (terminal)
node ./your.js < ./input.txt

Rust

input.txt
1 2
your.rs file
use std::io::{stdin, Read, stdout, Write, BufWriter}; fn main(){ let stdout = stdout(); let mut writer = BufWriter::new(stdout); let mut buf = String::new(); stdin().read_to_string(&mut buf).unwrap(); let mut input = buf.split_ascii_whitespace().flat_map(str::parse::<i32>); let mut num = input.next().unwrap(); // input write!(writer, "{num} {num2} {}", num+num2).unwrap(); // output }
how to run (terminal)
source $HOME/.cargo/env rustc ./your.rs ./your < ./input.txt
 

기존 입출력과의 차이점

각 언어에서 빠른 입출력을 구현하는 방식은 다르지만, 공통적으로 버퍼링과 입출력 호출 최적화에 중점을 둔다. ps 환경에서는 스레드 안정성을 신경쓰지 않아도 되고, 입력에 오류가 발생하지 않는다. 이 때문에 기존 언어들이 입출력 안정성에 신경 쓴 부분들을 크게 걱정하지 않아도 되는데, C++에서는 ios_base::sync_with_stdio(0); cin.tie(0); 같은 코드를 사용하여 입출력의 동기화를 끊고, Python에서는 sys.stdin.readline()을 사용해 불필요한 버퍼링을 피함으로써, 더 빠른 입출력을 가능하게 한다.
이러한 최적화 기법들은 PS 환경에서 알고리즘의 효율성을 극대화하기 위해 중요한 역할을 하며, 대량의 데이터를 빠르게 처리할 수 있도록 돕는다. 따라서, ps 환경에서는 이러한 입출력 최적화를 적극적으로 활용하는 것이 프로그램 성능 개선에 큰 도움이 될 것이다.