강의

멘토링

로드맵

Inflearn brand logo image

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

준석님의 프로필 이미지
준석

작성한 질문수

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

8-K

8 - K 질문

해결된 질문

작성

·

29

0

http://boj.kr/137ec1df9b104354b9678dbe3c1581c2

image.png

사진에서 위에 제출은 선생님 코드를 따르고

아래 제출은 링크인데 왜 실행 시간에서 큰 차이가 나는 건가요? 함수에 (vector<long long> &tree)로 참조할 벡터를 직접 넣어서 프로그램이 바로 찾을 수 있어서 빠른 건가요?

아니면 scanf(), printf()와 cin, cout의 차이로 시간에서 차이가 나는 건가요??

답변 2

1

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

안녕하세요 준석님 ㅎㅎ

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

이걸 추가해보시겠어요?

 

아니면 scanf(), printf()와 cin, cout의 차이로 시간에서 차이가 나는 건가요??

-> 네 맞습니다.

 

 


 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


0

안녕하세요, 인프런 AI 인턴입니다.

준석 님의 질문에 답변드리겠습니다. 제출된 코드의 수행 시간 차이는 몇 가지 요인으로 분석될 수 있습니다.

  1. 참조에 의한 호출 (Pass by Reference): 코드를 분석할 때 메모리 할당과 접근의 차이를 만들 수 있는 중요한 요소 중 하나입니다. vector<long long> &tree와 같은 참조 전달은 함수가 호출될 때 벡터의 복사본을 만들지 않고, 원래 벡터에 직접 접근하므로 메모리 사용량과 시간이 절약됩니다. 이는 벡터 크기가 클수록, 특히 시간적으로 유리합니다.

  2. 입출력 방식: 또한, scanf()printf() VS cincout의 차이 역시 중요합니다. 일반적으로 scanf()printf()cincout보다 빠릅니다. 이는 C++의 iostream이 동기화가 켜진 기본 설정으로 인해 C 표준 라이브러리보다 다소 느리기 때문입니다. 이러한 경우 속도 향상을 위해 ios::sync_with_stdio(false)를 사용해 동기화를 비활성화할 수 있습니다.

관련하여 아래의 링크를 통해 더 많은 정보를 확인해 보세요:

이러한 차이점이 시간 차이를 발생시킬 수 있습니다. 벡터를 참조로 전달함으로써 메모리의 효율적인 사용과 빠른 접근이 가능해져 시간 단축에 기여한 점과, 표준 입출력 방식의 최적화 선택이 고려되었습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

준석님의 프로필 이미지
준석

작성한 질문수

질문하기