저의 개인적인 공부에 대해 작성한 글입니다.
아직도 뭘 해야할지 몰라서 방황하고, 미루고 미루다가 너무 나태하단 생각이 들기 시작했습니다. 최근 진로도 정해졌고 무언가 목표가 생긴 지금부터 공부에 전념하기로 결심했습니다. 기록하는 습관이 너무 없어서 좀 걱정되지만, velog부터 시작해서 차근차근 할 계획입니다!
일단 코딩 테스트로 알고리즘, C++ 언어 등 여러가지 공부를 한번에 해야 된다는 생각에 최근 바빠도 하나는 꼭 풀려고 노력하고 있습니다. 슬프게도 시작한지 약 4일밖에 되지 않았습니다. 한심한 나 자신에서 벗어나기 위해서 노력하겠습니다~~
2일 전에 풀어보았던 BOJ10950 문제입니다.
연산을 하는 데 cin, cout 함수를 사용했더니 메모리 2020KB, 시간 4ms이 걸린겁니다.
ios_base::sync_with_stdio(false);
cin.tie(NULL);
버퍼 동기화를 끊고 tie를 풀어주는 함수라고 합니다.
iostream이 cstdio랑 동일한 버퍼시스템을 사용해서 scanf, printf를 호출한다고 들었습니다.
이것을 사용하지 않아서 걸렸나보다~하고 메인함수에 추가적으로 작성했더니 똑같았습니다(2번째 제출)
저는 제가 코드를 엉성하게 짰나 고민도 했고요.
실제로 그게 맞을지도 모릅니다.
그러나 저는 아직 잘 모르겠어요...
그래서 한번 이것저것 찾아보다가 scanf, printf함수를 사용하면 메모리 사용과 속도 면에서 좋다고 하길래 제출한 결과가 3번째 제출입니다. 메모리 1112KB, 시간 0ms.
실제 코드를 비교하자면 다음과 같습니다.
cin, cout함수
#include <iostream>
using namespace std;
int T, A, B;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> T;
for (int i = 0; i < T; i++) {
cin >> A >> B;
cout << A + B << endl;
}
return 0;
}
scanf, printf 함수
#include <cstdio>
int T, A, B;
int main() {
scanf("%d \n", &T);
for (int i = 0; i < T; i++) {
scanf("%d %d", &A, &B);
printf("%d\n", A + B);
}
return 0;
}
저는 처음에 scanf, printf 함수를 사용하는 게 코테에 더 유리하지 않은가 싶었는데 사람들은 cin, cout 함수를 더 이용하더라고요. 이유를 들어보면 안정성, 확정성에 있다고 합니다. 속도는 데이터 형식이 지정되지 않는 점에서 느리다네요.
그러니 결론적으로
안정성과 확정성을 보장받기 위해선 cin, cout 함수 사용을 권장하는 느낌 같습니다. 앞서 작성한 ios_base::sync_with_stdio(false)와 cin.tie(NULL)을 같이 작성하면 전보다 속도는 빨라진다는데 제가 제출한 결과에서는 똑같아서 체감이 잘 안되고, 하여튼 잘 모르겠습니다!
그러나 역시 상황에 따라서는 scanf, printf 함수 사용도 고려하는게 좋을 것 같습니다!