ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 15552(빠른 A+B) C / C++
    백준 문제 2021. 9. 5. 15:33
    728x90

    문제

     

    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); 코드를

    사용하는게 좋을것 같습니다.

Designed by Tistory.