• Home
  • About
    • Jiwon Jeong photo

      Jiwon Jeong

      끊임없이 배우며 성장하는 엔지니어

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

C++ 기본

02 May 2021

Reading time ~1 minute

코딩 테스트가 실제 개발과 다른점

  • 전역 변수의 사용
  • 동적 할당 대신 배열(또는 stl vector) 사용하기
  • 미리 계산한 상수값 사용하기
  • 가독성 좋은 알고리즘 대신 성능에 유리한 알고리즘 사용하기

자주 하는 실수

  • 산술 오버플로 (정수 자료형 표현, 실수 자료형 표현)
  • 산술 언더플로 ( 오버플로랑 다름에 유의! )
  • 배열 범위 밖의 원소 접근 (대표적인 런타임 에러)
  • off-by-one : 하나가 많거나 모자라는 실수를 가리키는 말로 <, > 연산자와 <= , >= 연산자를 쓸때 자주 발생

시간복잡도

  • 일반적으로 N=1억개 = 1초 가 걸린다.

스트림

  • 서로 다른 장치를 이어주는 가상 연결 고리
    • 스트림을 통해 두 장치 사이에서 데이터 주고 받을 수 있음

버퍼

  • 스트림 내부적으로 버퍼를 사용해서 입/출력 관련 데이터를 일시적으로 보관 가능
  • 장점
    • 묶어서 한 번에 전달하므로, 성능이 향상된다.
    • 속도 차이가 나는 두 장치 사이의 완충제 역할을 할 수 있다.
  • 단점
    • 추가적인 메모리 공간을 필요로 한다. => 사용 용도에 맞게 적절한 크기로 사용해야 한다.

C++ 입출력 속도 향상 방법

  • C스타일 입출력
#include <cstdio>

int main(void)
{
	int n;
	scanf("%d", &n);
	printf("%d\n", n);
}
  • c++ 입출력 사용
#include <iostream>

using namespace std;

int main(void)
{
	ios_base::sync_with_stdio(false); // c와 c++의 표준 입출력 스트림을 동기화를 하지 않겠다는 의미
	cin.tie(nullptr); // cin사용시 출력 버퍼를 비우지(flush) 않는다.

	int n;
	cin >> n;
	cout << n << "\n";
}
  • scanf(), printf() 사용하기
    • cstdio 라이브러리 사용
  • endl 절대 사용 금지!!
    • endl 대신 개행 문자(“\n”)를 사용
    • 버퍼를 지우지 않아도 되므로 속도 향상
  • ios_base::sync_with_stdio(false) , cin.tie(NULL) 사용하기
    • ios_base::sync_with_stdio(false) : C Stream과 C++ Stream 사이의 동기화를 끊음(속도향상)
    • cin.tie(nullptr) : cin과 cout의 묶음(tie)을 푼다.
      • 기본적으로 cin과 cout은 묶여(tie)있음. 스트림이 묶여 있을 경우, I/O작업 변경 시 자동으로 버퍼를 비움(flush)
      • 우리는 버퍼를 유지시키는게 이득!


Algorithm Share Tweet +1