728x90
320x100
15552번: 빠른 A+B
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
www.acmicpc.net
반응형
📌 접근 방법
- C로는 시간초과 없이 풀 수 있었지만 C++로는 시간초과가 났다.
- 입출력에 관한 지식이 더 필요할 것 같다.
- C언어 : scanf(), printf()를 사용해서 빠르게 문제를 해결 가능
- C++ : cin, cout를 이용하면서 시간초과가 발생
✔ 해결 방법
1. C++와 C 표준 스트림의 동기화 해제
ios::sync_with_stdio(false);
- C++에서는 C++과 C의 표준 스트림이 동기화 되어있음 (동일한 버퍼를 공유)
- 이런 동기화 상태가 성능을 저하시키지만, 매우 합리적이고 스레드로부터 안전하기 때문에 동기화 상태로 두는 것이 올바른 방법
➡ 알고리즘 문제 풀이에서는 예외 처리나 멀티스레드 작업을 필요로 하지 않기 때문에 두 동기화를 끊어줘도 됨!
➡ 성능이 많이 좋아짐 - 동기화를 끊어주면 C, C++ 중 하나의 스타일을 써야 함(혼용 X)
2. 입력과 출력 연결을 끊기
cin.tie(NULL);
cin.tie(nullptr), cin.tie(0)
- 두 방법 중 하나를 택하면 됨
- 기본적으로 입력과 출력은 연결되어 있음! ➡ 이것을 끊어주는 것
- 입력 요청이 들어오면 그 전에 출력 버퍼에 내용이 있었을 경우 버퍼를 비워주고 출력(flush)
3. endl 대신 '\n'사용
- endl은 줄바꿈만 해주는 것이 아니라 출력 버퍼를 비워줌(flush)
➡ 위에서 사용한 방법인 tie를 끊어주는 효과- 매 번 출력할 필요가 없으니 자주 버퍼를 비울 필요가 없음
- 성능 낭비
⚡ 다른 방법
C 표준 입출력 stdio.h 사용해도 됨
➡ 하지만 iostream 사용할 것임
✅ Pass Code
#include<iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin>>T;
int A,B;
for(int i=0; i<T; i++){
cin>>A>>B;
cout<<A+B<<'\n';
}
return 0;
}
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif)
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[BOJ/백준/C++] 2869번 달팽이는 올라가고 싶다 (0) | 2024.01.26 |
---|---|
[BOJ/백준/C++] 1193번 분수찾기 (1) | 2024.01.26 |
[BOJ/백준/C++] 2903번 중앙 이동 알고리즘 (1) | 2024.01.26 |
[BOJ/백준/C++] 2745번 진법 변환 (0) | 2024.01.26 |
[BOJ/백준/C++] 2563번 색종이 (0) | 2024.01.26 |