티스토리 뷰

728x90

백준에서 시간초과 나는경우 로직 문제(시간 복잡도)인 경우가 많지만

입출력 관련 코드 때문에 시간초과가 나는 경우가 생각보다 많은 것 같다. (나포함) 

그래서 일단 시간초과 나면 아래의 코드를 main함수안에 추가하고 제출한다.

 

1. endl 대신 "\n"

백준 처음 풀때는 쉬운문제를 풀어서 endl써도 상관없는 문제가 많았지만

solve.ac 난이도로 실버대에만 들어와도 endl쓰면 시간초과가 나는 경우가 많은 것 같다.

종종 백준 문제 질문게시판에서 시간초과 난 글 보면 endl을 "\n"로만 고치면 통과되는 글이 종종 보인다.

줄바꿈은 "\n" 필수입니다..

 

2. ios::sync_with_stdio(false);

main 함수안에 맨위에 이 코드를 써주면 c 표준 stream과 C++ 표준 stream의 동기화를 끊는다.

cin, cout 자체가 scanf, printf 보다 속도가 느리다고는 하지만 cin, cout을 쓰고 싶다면 c 표준 스트림과의 동기화를 끊어서

속도를 향상시킬 수 있다. (사용하는 버퍼의 수가 줄기 때문이라고 한다.)

다만 이렇게 되면 scanf와 printf를 cin, cout 과 같이 쓰면 안된다.

동기화를 끊었기 때문에 입출력 순서가 섞일 수 있다.

 

3. cin.tie(NULL);

cout과 연결 끊어주기. 효과는 있는 것 같은데

원래 끊어주면 앞에 출력문이 안떠야하는데 잘 뜬다..^ 그래도 시간은 줄어든다고 하니까 매번 쓰긴한다.

 

2,3번은 main함수 안에 맨위에 추가해준다.

대개 입출력이 많을 때 효과가 있는 것 같다.

 

*매번 찾아보기 귀찮아서 정리하려고 쓰는데 원리 공부 다시했다.

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함