인프런 커뮤니티 질문&답변

박완섭님의 프로필 이미지
박완섭

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3474 교수가 된 현우 문제 질문입니다!

작성

·

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같은 경우 해당 부분은 외워주셔야 합니다. 이거 안되서 통과 안되는 문제도 있어요. 

 

참고로 교안에는 다음과 같이 설명되어있습니다. 

입출력 싱크

ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

위 코드는 입출력싱크를 맞추는 것을 해제한다는 의미입니다. 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);

 

이 코드를 넣는 기준을 알 수 있을까요??

이 코드를 삽입하지 않아서 틀린것인지 확실히 판별할 실력이 아니라서요.

기준이 있는지 궁금합니다.

큰돌님의 프로필 이미지
큰돌
지식공유자

문제 마다 달라서 일단은 넣지 않고 풀다가 시간초과가 나면 한번 넣어보시면 됩니다.

박완섭님의 프로필 이미지
박완섭
질문자

넵 감사합니다!

박완섭님의 프로필 이미지
박완섭

작성한 질문수

질문하기