11월 5일 - Cpp

Yullgiii·2024년 11월 5일
1

[Cpp] 입출력 실행 속도 줄이는 법

C++로 알고리즘 문제를 풀 때 cin, cout을 사용하면 실행 속도가 느려질 수 있다. 하지만 최적화 기법을 적용하면 실행 시간을 효율적으로 단축할 수 있다. 특히 문제 풀이 시 시간 제한이 중요한 경우, 아래와 같은 방법을 사용해 속도를 줄여보자.

cin, cout 최적화 시에는 약 절반 정도의 시간 단축 효과를 기대할 수 있다.


최적화 코드 예제

#include <iostream>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false); // C와 C++의 입출력 동기화 해제
    cin.tie(NULL); // cin과 cout의 묶음 해제
    cout.tie(NULL); // cout의 묶음 해제

    // 예제 입출력
    int a, b;
    cin >> a >> b;
    cout << a + b << "\n";

    return 0;
}

주요 구문 설명

  1. ios_base::sync_with_stdio(false);

기본적으로 cin, cout은 C의 stdio와 동기화되므로 느려질 수 있다. 이 옵션을 false로 설정하면 동기화를 해제하여 C++ 표준 입출력을 빠르게 처리할 수 있게 된다.
2. cin.tie(NULL);cout.tie(NULL);

cincout의 묶음을 풀어줘 입출력 간의 독립성을 보장한다. 이로써 불필요한 대기 시간이 줄어들어 실행 속도가 더 빨라진다.

주의 사항

  1. cin, scanf 또는 cout, printf를 혼용하면 예상치 못한 결과가 발생할 수 있다. 동기화를 해제한 후 혼용 시 문제 발생 가능성이 있으므로 동일한 입출력 방식을 사용해야 한다.

  2. 이 최적화 기법은 싱글 스레드 환경에서만 효율적이다. 알고리즘 문제 풀이와 같은 상황에서 유용하지만, 실무에서는 입출력 동기화가 필요한 경우가 많으므로 신중히 사용하자.

  3. 속도가 중요하지 않다면, 그냥 printf와 scanf를 사용하는 것도 좋은 대안이 될 수 있다. 최적화가 필요한 상황에서만 활용하는 것이 좋다.

So...

C++에서 cin, cout 최적화는 알고리즘 문제 풀이 시 입출력 속도를 개선하는 데 효과적이다. 단, 동기화 해제에 따른 주의 사항을 염두에 두고 사용하는 것이 필요하다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글