Hello

: )

2018년 3월 18일 일요일

C++ 입출력 처리에 대해서

C++ 입출력 처리방법 문제(standard C stream 을 쓸지 standard C++ stream 을 쓸지에 관한..)는 C 방식을 쓰자고 정했었는데, 최근에 백준 님 블로그 보니 scanf/printf 를 쓰나 cin/cout 을 쓰나(알고보니 성능이 더 좋음...) 고민할 필요가 없네요.

예전 글: https://gooddaytocode.blogspot.kr/2016/07/cin-scanf.html

상황에 따라서 C++ 을 기본으로 쓰다가, 입출력 처리가 귀찮은 경우에는 C 를 쓰는 방식으로 정했습니다. 일단은..

다만, Standard C++ stream 을 쓸 때에는 아래 코드가 입출력 발생전에 있어야 하고, 이 후에는 Standard C stream 과 혼용하면 안 됩니다.




* 입출력 성능에 관한 백준 님의 블로그

입력 속도 비교
https://www.acmicpc.net/blog/view/56


출력 속도 비교
https://www.acmicpc.net/blog/view/57


* 입출력 속도 확인해 볼 수 있는 문제1

100만 번의 정수형 입력과 출력이 발생하는 문제

빠른 A+B
https://www.acmicpc.net/problem/15552

간단한 문제이니 풀고 나서 "맞은 사람" 선택해서 어떠한 입출력 방식으로 풀었는지 공개된 코드를 보면 됩니다....

정수형으로 이루어진 문제이기 때문에
저수준 API 를 이용( fread() 등 )해서 입력을 모두 읽어서 정수 데이터를 만드는 처리 방식(일명, fast IO)으로 빠른 수행시간을 이뤄내는 코드를 볼 수가 있습니다.


* 입출력 속도 확인해 볼 수 있는 문제2

1000만 번의 정수형 입력을 처리해야 하는 문제

중복된 숫자
https://www.acmicpc.net/problem/15719

C++11 설정으로
scanf / printf 의 경우 : 시간초과
cin / cout 전에 sync_with_stdio() 만 해하는 경우 : 시간초과
cin / cout 전에 sync_with_stdio() + cout.tie() 해주는 경우 : 1960MS 로 통과네요.

댓글 없음:

댓글 쓰기