티스토리 뷰
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의 입출력 방식을 사용하면 안 된다.
Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다. BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
Python을 사용하고 있다면, input 대신 sys.stdin.readline을 사용할 수 있다. 단, 이때는 맨 끝의 개행문자까지 같이 입력받기 때문에 문자열을 저장하고 싶을 경우 .rstrip()을 추가로 해 주는 것이 좋다.
또한 입력과 출력 스트림은 별개이므로, 테스트케이스를 전부 입력받아서 저장한 뒤 전부 출력할 필요는 없다. 테스트케이스를 하나 받은 뒤 하나 출력해도 된다.
자세한 설명 및 다른 언어의 경우는 이 글에 설명되어 있다.
이 블로그 글에서 BOJ의 기타 여러 가지 팁을 볼 수 있다.
- 코드
#include <iostream>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int T, A, B;
cin >> T;
for (;T > 0; T--)
{
cin >> A >> B;
cout << A + B << "\n";
}
return 0;
}
- C++의 cin/cout을 사용할 경우
- endl : 개행문자 출력 및 출력 버퍼 비우는 역할을 하고 이때 버퍼를 비우는 작업이 매우 느리다. endl 대신 개행문자('\n') 사용하면 시간향상이 나타난다.
- cin.tie(NULL) : 디폴트로 cin과 cout은 tie되어 있어서 cout << "hi"; cin >> name; 순서라면 "hi" 먼저 출력되고 name을 입력하게 된다. 그러나 untie인 경우 cin 입력부터 하게 되고 cout 출력은 입력이 끝난 후에 출력된다. 백준에서는 입력과 출력이 번갈아 나오지 않아도 되기 때문에 cin.tie(NULL)을 이용해서 시간을 향상시킨다.
- ios_base::sync_with_stdio(false) : C와 C++의 버퍼를 분리한다. 이것을 사용하면 cin/cout이 더 이상 stdin/stdout과 맞춰 줄 필요가 없으므로 속도가 빨라진다. 단, 버퍼가 분리되었으므로 cin과 scanf, gets, getchar 등을 같이 사용하면 안 되고, cout과 printf, puts, putchar 등을 같이 사용하면 안 된다.
출처 : www.acmicpc.net/board/view/22716 , codecollector.tistory.com/381
'Programming > 백준' 카테고리의 다른 글
[백준/1463번] 1로 만들기 (C++) (0) | 2020.09.15 |
---|
- Total
- Today
- Yesterday
- ft_printf
- 42seoul
- 백준
- 네이버커넥트재단
- 멋쟁이사자처럼9기
- github
- printf
- 코드포스
- django
- C++
- 코린이
- ES6
- 42서울
- 드림코딩
- 코딩뉴비챌린지
- 멋쟁이사자처럼
- 42cursus
- 컴퓨터과학
- BOJ
- 부스트코스
- git
- Python
- codeforces
- 부스트코딩뉴비챌린지
- ft_server
- 자바스크립트
- CS50
- 알고리즘
- 드림코딩by엘리
- 코린이의 성장일기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |