문제
해석
이 문제는 코드작성을 위한 학습보다는 개념을 학습을 위한 문제입니다.
풀이
문제의 개념을 이용해 코드를 작성하면 다음과 같습니다.
#include<iostream>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int T;
cin >> T;
while (T--) {
int a, b;
cin >> a >> b;
cout << a + b << '\n';
}
}
테스트 케이스에 대한 while 표현은 다음 문제를 참고 바랍니다.
https://whitecode2718.tistory.com/66
이 문제를 통해 학습할 수 있는 건 2가지가 있습니다.
cin.tie(NULL);
ios_base::sync_with_stdio(false);
첫 번째로 위 코드를 작성하지 않으면 수많은 테스트 케이스로 인해 시간에러(시간 초과)가 발생한다는 것입니다.
입력이 많으면 당연히 수행시간이 길어지고, 최대한 수행시간을 줄이려고 여러 알고리즘을 사용하는 게 코딩 알고리즘을 학습하는 본질 중 하나인데 이경우 단순히 합하는 것만으로 시간 초과가 발생했습니다.
때문에 위의 코드를 작성해 시간 초과를 어느 정도 피할 수 있습니다. 이유를 간단히 설명하면, 임시로 저장할 버퍼메모리 일부를 사용하지 않고(C++은 C의 버퍼메모리를), 버퍼메모리를 비우지 않고 입출력을 하겠다는 의미입니다. 엄밀히 조금 틀리지만, 버퍼 메모리를 지우는 동작을 수행하지 않음으로써 수행시간을 줄이는 개념입니다.
때문에 문제 설명에서 C 버퍼메모리를 사용해야만 하는 getchar( ), scanf( )를 사용할 수 없는 겁니다.
두 번째로 endl; 조작자가 아닌 개행 문자 '\n'를 사용해야 한다는 것입니다. endl; 또한 버퍼 메모리를 지우고 다음줄로 바꾼다는 의미이기 때문에 첫 번째의 경우와 마찬가지 이유로 개행 문자 '\n'를 사용하면 수행시간을 줄일 수 있습니다.
정리
앞으로 수행시간을 줄이기 위한 입출력 코드를 학습할 수 있었고, 테스트 케이스가 많을 경우 endl; 조작자 보다 개행문자 '\n'를 사용하는 게 더 효율적이라는 사실을 배웠습니다.
'프로그래밍 > 코딩 테스트 연습' 카테고리의 다른 글
[백준] 2438번 : 별 찍기 - 1 (3단계) (C++) (0) | 2024.01.11 |
---|---|
[백준] 2439번 : 별 찍기 - 2 (3단계) (C++) (1) | 2024.01.11 |
[백준] 25314번 : 코딩은 체육과목 입니다 (3단계) (C++) (1) | 2024.01.10 |
[백준] 11022번 : A+B - 8 (3단계) (C++) (0) | 2024.01.10 |
[백준] 11021번 : A+B - 7 (3단계) (C++) (0) | 2024.01.10 |