scanf printf는
"%d" 등으로 형식을 맞춰서 처리합니다.
이런 경우에 하다보면 문자열 등을 받을 때에는 무언가 불안정하죠.
그만큼 처리를 하지 않기 때문이고 그만큼 빨라지는게 아닌가 싶습니다.
1181번 - 단어 정렬
scanf printf는
"%d" 등으로 형식을 맞춰서 처리합니다.
이런 경우에 하다보면 문자열 등을 받을 때에는 무언가 불안정하죠.
그만큼 처리를 하지 않기 때문이고 그만큼 빨라지는게 아닌가 싶습니다.
https://www.acmicpc.net/blog/v...
결론만 말씀드리면 C++에서는 아래처럼 작성하시면 됩니다.
각 두 줄이 무슨 역할을 하는지는 검색 해보시고,
속도가 빨라지는 대신 cin이랑 scanf를 같이 쓸 수 없게 된다는 점에 유의해주세요.
scanf보다 ios_base::sync_with_stdio(false); cin.tie(NULL);을 포함한 cin이 더 빠릅니다. (올려드린 링크 확인좀 해보세요)
빠른 입출력과 관련된 문제(예를 들면 이런 문제)가 아님에도 저 두 줄을 포함한 cin을 사용해서 시간 초과가 난다면, 다른 곳에서 틀린 것입니다.
sync_with_stdio(0)는 scanf와 cin 사이의 동기화를 해제하고, cin.tie(0)은 입력과 출력 사이의 flush를 무시합니다.
참고로 flush 관련 문제 때문에 cout에서 endl도 쓰시면 안 됩니다. (느립니다)
아래 두 글도 한번씩 읽어보시면 도움이 되실 것 같습니다.
댓글을 작성하려면 로그인해야 합니다.
sc3289 2년 전
사전 정렬 문제를 제가 배열 알고리즘을 아직 공부를 안해가지고
연결리스트로 풀었는데
시간초과가 뜹니다. 그래서 게시판에 질문을 올렸는데
입출력을 cin,cout 말고 scanf랑 printf로 하면 정답뜬다고 하셔서 그렇게 해봤더니 진짜 통과했네요.....
혹시 왜 그런지 알려주실 수 있나요?,.....