백준 문제풀이

15552번 : 빠른 A+B

하다블 2022. 5. 18. 18:36
반응형

문제는 다음과 같습니다.

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

 

풀이 코드는 다음과 같습니다.

#include <iostream>

using namespace std;
int main(){
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n,a,b;
  cin>>n;
  for(int i{0};i<n;i++)
    {
      cin>>a>>b;
      cout<<a+b<<"\n";
    }
  

return 0;
}

다른 점은 메인 함수에서 

ios_base::sync_with_stdio(false)

cin.tie(NULL) 이라는 명령어가 추가되었습니다.

사실 C언어 C++에서 scanf , printf를 사용한다면 두 함수의 처리 속도가 빠르기 때문에 큰 문제를 일으키지 않지만 cin , cout , endl 과 같은 명령어를 사용하면 시간초과에 걸리게 됩니다.

그래서 두 줄의 코드를 추가해주었는데,

ios_base::sync_with_stdio(false)는 C++과 C언어의 표준 스트림 동기화를 해제하는 역할을 합니다.

C++과 C언어는 서로 스트림이 연결되어 있어서 scanf를 사용하다가 출력을 cout으로 하는 것이 가능하지만 이는 당연히 처리속도가 느려지는 단점을 가지고 있습니다.

이를 해제하게 되면 처리 속도가 빨라지게 됩니다. 단 , 두 가지의 방식을 혼용하여 사용하는 것이 불가능해지기 때문에 하나의 방식으로 코드를 짜야합니다.

cin.tie(NULL) 은 입출력 연동을 해제하는 명령어입니다.

for문에서 cout 이후 cin을 사용하면 cout -> cin-> cout -> cin 순으로 계속해서 버퍼를 이전에 출력한 작업을 비우는 일을 합니다. 이를 해제하여 버퍼를 비우는 시간을 절약할 수 있습니다.

단, 이 방법은 cout -> cout -> cout ... ->cin ->cin 이런 식 또는 cin -> cin -> cin -> ...  -> cout -> cout -> cout 방식으로 처리하게 됩니다.

endl을 사용하지 않고 \n을 사용하는 것 역시 cin.tie(NULL) 과 같이 버퍼를 비우는 시간을 없에기 위해 사용됩니다.

따라서 두 명령어를 입력하고 endl을 사용하지 않고 \n을 사용하면 이번 문제를 해결할 수 있습니다.

 

 

반응형

'백준 문제풀이' 카테고리의 다른 글

1550번 : 16진수  (0) 2022.05.19
2914번 : 저작권  (0) 2022.05.19
2775번 : 부녀회장이 될테야  (0) 2022.05.18
11399번 : ATM  (0) 2022.05.12
2475번 : 검증수  (0) 2022.05.12