-
백준 15552(빠른 A+B) C / C++백준 문제 2021. 9. 5. 15:33728x90
15552번: 빠른 A+B
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
www.acmicpc.net
단순한 수학 구현 문제입니다.
몇번 계산 할지 테스트 케이스 T개를 입력받아 정수 A와 B를 입력받아 A와B를 더해주는 값을 출력해주는 문제입니다.
먼저 C언어로 풀은 코드 입니다.
#include <stdio.h> int main(){ int T; //테스트케이스 선언 int A, B; //정수 A,B선언 scanf("%d", &T); //몇번 계산할지 테스트케이스 입력받기 for (int i = 0; i < T; i++) { //T번 동안 계산 반복 scanf("%d %d", &A, &B); //정수 A,B입력 받기 printf("%d\n", A + B); //입력받은 정수 A,B합 출력 } return 0; }
정말 간단한 구현 문제입니다. 문제없이 백준에서 잘 돌아갑니다.
C++로 한번 풀어 봤습니다.
#include<iostream> using namespace std; int main() { int T; //테스트 케이스 선언 cin >> T; //테스트 케이스 입력받기 while (T--) { //입력받은 테스트케이스 동안 반복 int A, B; //정수 A,B선언 cin >> A >> B; //정수 A,B 입력받기 cout << A + B << '\n'; //입력받은 정수 A+B출력 } return 0; }
C언어 똑같이 코드 작성을 해주었습니다. 하지만 결과는...
시간 초과가 발생했습니다.
분명 C언어와 코드도 똑같이 했는데 C++에서는 왜 시간초과가 나는지 알 수 없었습니다.
그래서 조사를 해보니 C언어와 C++의 입출력 시간차이 때문에 시간초과가 난것을 알 수 있었습니다.
C언어의 입출력 방식인 printf와 scanf는 그 자체로 속도가 빨라 시간 초과가 나지 않지만
C++의 입출력 방식인 cout과 cin은 상대적으로 느립니다.
정확한 이유는 링크를 걸어두겠습니다.
결론부터 말하면 C++에서도 입출력 방식으로 printf와 scanf를 사용하실 수 있습니다.
하지만 cout과 cin문법의 편리함을 사용하면서 속도를 빠르게 할려면
ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
라는 코드가 main함수 안에 들어가야 합니다.
수정된 코드를 보면
#include<iostream> using namespace std; int main() { ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL); //속도올리는 코드 int T; //테스트 케이스 선언 cin >> T; //테스트 케이스 입력받기 while (T--) { //입력받은 테스트케이스 동안 반복 int A, B; //정수 A,B선언 cin >> A >> B; //정수 A,B 입력받기 cout << A + B << '\n'; //입력받은 정수 A+B출력 } return 0; }
main함수 맨 윗줄에 새로운 코드가 들어간걸 알 수 있습니다. 다시 백준 채점사이트에 채점을 해보면
맞았다는 것을 알 수 있습니다.
따라서 왠만하면 C++을 사용할때에는 항상 ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL); 코드를
사용하는게 좋을것 같습니다.
'백준 문제' 카테고리의 다른 글
백준 1158(요세푸스 문제) c++ (0) 2021.09.05 백준 10804(카드 역배치) c++ (0) 2021.09.05 백준 16563번 (어려운 소인수분해) c++ (0) 2021.08.31 백준 11653번 (소인수분해) c언어 (0) 2021.08.30 백준 2960번(에라토스테네스의 체)c++ (0) 2021.08.30