일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- class_template
- Heap
- data_structure
- c++
- Pair
- Articulation_Point
- 자료구조
- Algorithm
- list
- template
- STL
- qsort
- 문법
- 알고리즘
- 구현
- 13305
- sstream
- '0'
- Biconnected_Component
- singly Linked List
- 총정리
- red-black tree
- sort
- 5397
- connected_component
- function_template
- 백준
- 예제
- deletion
- Critical_Path_Analysis
- Today
- Total
- Today
- Total
- 방명록
어제의 나보다 성장한 오늘의 나
[C++][코딩테스트] 시간 부족 문제 해결 꿀팁 정리( endl , ios_base::sync_with_stdio(false) , cin.tie(NULL) , cout.tie(NULL) ) 본문
[C++][코딩테스트] 시간 부족 문제 해결 꿀팁 정리( endl , ios_base::sync_with_stdio(false) , cin.tie(NULL) , cout.tie(NULL) )
today_me 2022. 7. 1. 18:54알고리듬 문제를 풀 때 시간이 굉장히 중요한데요
당연 시간 복잡도가 적게 드는 알고리듬을 선택하는 것이 관건이지요.
하지만 그 외에도 실행 시간을 줄여주는 꿀팁들이 있습니다.
이것 들을 습관화 해서 더 좋은 코드들로 발전 시켜 봅시다.
※ 참고 : C++에서의 팁입니다.
1) endl 대신 \n 사용
cout 을 해줄 때 다들 endl을 많이들 사용하시는데요.
endl은 개행 문자 출력 + 버퍼 비우기 를 시행하기 때문에 시간이 더 많이 걸립니다.
cout << "Yes" << endl;
보다는
cout << "Yes\n";
이렇게 \n을 사용해주는 습관을 길러봅시다.
2) ios_base::sync_with_stdio(false);
이 코드는 c와 c++의 스트림들(iostram 과 stdio)의 동기화를 false 로 바꿔 준다.
쉽게 말하면 이 구문을 통해 c, c++의 스트림들이 독립된 버퍼를 가지게 되어 c와 c++ 스타일을 같이 사용하면 예상치 못한 결과가 나올 수 있다는 것이다.
따라서 c++만을 사용할 때....그러니까 c의 printf , scanf 등을 사용하지 않을 때!!
사용 해주면 된다.
'근데 왜 쓰는가? 오히려 위험해 지는 것 아니냐' 라고 생각 하실 수 있는데 독립된 버퍼를 사용하기 때문에 버퍼가 가벼우니 속도가 훨씬 빨라진다.
Code
int main(void){
ios_base::sync_with_stdio(false);
cout << "Yes\n";
}
3) cin.tie(NULL) ; cout.tie(NULL);
2)의 ios_base::sync_with_stdio(false) 와 함께 많이 사용되는 코드이다.
개념이 조금 비슷하다.
cin과 cout은 원래 묶여서 사용된다.
묶여 있는 경우 cin의 경우 버퍼를 비워주기 + 입력 받기 두 가지의 역할을 수행해야만 한다.
예를 들어
string s= "Yes";
cout << s;
cin >> s;
이런 코드가 있을 때
cout 을 통해 버퍼에 s가 들어간다.
cin을 통해 s에 입력을 받으려 한다.
버퍼가 차있기 때문에 버퍼에 있는 것이 먼저 출력되고 cin을 통해 입력을 받는다.
이렇게 cin의 경우 cout 과 묶여 있으면 두 번의 일을 하게 된다.
매번 이렇게 실행 중간에 출력을 해줄 필요가 없다..! 하시면
cin과 cout을 분리 시키는 것이 버퍼를 매번 비워주지 않아도 되기 때문에 훨씬 빠르다.
특히 코딩 테스트나 알고리듬 문제를 풀 때는 실행 중간에 출력이 필요하지 않다.
그러므로 코딩 테스트 , 알고리듬 문제 풀이 때는 분리 시켜서 사용하는 것이 속도 향상에 도움이 된다.
Code
int main(void){
cin.tie(NULL);
cout.tie(NULL);
}
1) 2) 3) 같이 사용
int main(void){
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
cout << "Yes\n";
}
'c++ > 백준 문제 풀이' 카테고리의 다른 글
[C++][집합 / 자료구조] 백준 1717번 풀이 및 설명 (0) | 2022.07.01 |
---|---|
[C++][Graph] 백준 1197번 문제 풀이 및 설명 (0) | 2022.07.01 |
[c++][BFS] 백준 2178번 문제 풀이 (0) | 2022.02.24 |
[c++][백준] "출력 형식이 잘못 되었습니다" 오류 해결 방법 (0) | 2022.02.24 |
[c++][Greedy] 백준 1339번 문제 풀이 (0) | 2022.02.23 |