작성
·
331
0
안녕하세요 큰돌님.
별거 아닌 문제긴 한데..
3474번의 경우
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
이런 코드를 입력하지 않으면 정답 처리가 되지 않아서 질문드립니다.
1. 입출력 시간을 줄여주는 코드인 것은 서칭을 통해 이해하였는데..
저 코드를 언제 넣고 언제 빼는지?
아니면 일반적으로 코테하는 사람들은
#include<bits/stdc++.h>와 같이 그냥 코드에 무조건적으로 넣어 놓는지가 궁금합니다.
2. 코테에서
#include<bits/stdc++.h> 와
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
혹은
scanf를 사용하기 위해
#define _CRT_SECURE_NO_WARNINGS 같은 코드를 사용해야 하는데..
이런 코드들은 서칭을 통해 넣을 수 있는 지 아니면 외우는게 당연한 코드인지 질문드립니다.
답변 1
1
안녕하세요. ㅎㅎ 해당부분은 교안에도 설명이 되어있는데요.
일단 scanf를 쓸꺼면 scanf만 쓰시고. cin을 쓰실거면 cin만 쓰셔야 합니다.
scanf를 쓰신다면 그냥 빠르니 그대로 쓰시면 되구요. #define : 외우시지 않으셔도 됩니다.
cin같은 경우 해당 부분은 외워주셔야 합니다. 이거 안되서 통과 안되는 문제도 있어요.
참고로 교안에는 다음과 같이 설명되어있습니다.
위 코드는 입출력싱크를 맞추는 것을 해제한다는 의미입니다. c++에서 대표적인 입출력 함수로는 cin, cout, scanf, printf가 있고 이는 시스템콜관련 함수이므로 같이 쓰일 때는 입출력싱크를 맞춰주어야 합니다.
또한 보통 cin, cout과 scanf, printf 중 scanf, printf가 빠릅니다.왜냐면 cin, cout은 c라이브러리인 stdio의 버퍼와 동기화하느라 시간을 소비하기 때문이죠.
이 때 cin, cout의 시간을 빠르게 해주는 방법이 있습니다. 바로 위코드처럼 싱크를 해제하여 버퍼 동기화를 하지 않는 것이죠. 하지만 이렇게 했을 때 반드시!!cin, cout를 쓸 때 scanf, printf를 쓰지 말아야 합니다. 동기가 풀리니 모르는 사이드 이펙트가 발생할 수도 있는 것이죠.
감사합니다.
혹시
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
이 코드를 넣는 기준을 알 수 있을까요??
이 코드를 삽입하지 않아서 틀린것인지 확실히 판별할 실력이 아니라서요.
기준이 있는지 궁금합니다.