문제 링크 https://www.acmicpc.net/problem/15552
문제 설명
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.C++을 사용하고 있고 cin/cout을 사용하고자 한다면, cin.tie(NULL)과 sync_with_stdio(false)를 둘 다 적용해 주고, endl 대신 개행문자(\n)를 쓰자. 단, 이렇게 하면 더 이상 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식을 사용하면 안 된다.
또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i < N; i++) {
int A, B;
cin >> A >> B;
cout << A + B << "\n";
}
return 0;
}
ios::sync_with_stdio(false)
- C와 C++ 표준 stream의 동기화를 비활성화함
- 이 코드를 작성한 후에는 C 스타일과 C++ 스타일의 혼합이 불가
(printf scanf와 cin, cout 혼합 사용 불가)- C++ 코드만 사용해 기존 동기화 과정에서 필요하던 시간 절약
→ 입출력 속도 향상
cin.tie(0)
- 한 쌍으로 묶여있는 cin, cout을 분리
cout << "이름 입력해주세요. \n" <<; cin >> name; 원래대로라면 이름을 입력해주세요. 가 무조건 먼저 출력된 후 이름 입력 가능
cin.tie(0)
코드를 추가하면 출력전에 이름 입력 가능
내부적으로 cin, cout 묶는 과정 수행하지않아 시간 절약
\n
- 입출력시 개행을 하려면
endl
대신\n
을 사용해야 시간 절약
그냥 빠른 입출력을 위해 아무 생각없이 코드를 추가했었는데, 이번에 정리하면서 코드가 어떻게 작동되고, 왜 시간을 절약할 수 있는지 이해하게 되어 더 오랫동안 기억에 남을 것 같다!!🤩
혹시 100m 몇초에 뛰시나요??