CP 꿀팁

CP는 무엇보다도 푸는 시간이 짧아야 한다. 쉬운 A B 문제들을 얼마나 빠르고 정확하게 푸느냐가 대회의 성적에 꽤나 많은 영향을 준다. 본 게시글에서는 이에 대한 꿀팁들을 정리해 놓으려고 한다.

bits/stdc++.h 헤더

가장 많이 알려져 있는 꿀팁이다. 모든 C++ 표준 라이브러리가 포함된 헤더이다. 표준 헤더가 아니기 때문에 GCC가 아닌 컴파일러로는 컴파일(인식)이 되지 않지만 백준, 코드포스, ACM-ICPC와 같이 GCC를 컴파일러로 사용하는 대회에서 유용하게 사용된다. 헤더 부분이 지저분해지는 것을 방지할 수 있고, 컴파일 시간은 오래 걸리지만 코딩 시간은 줄일 수 있다!

하지만, 필자는 다음의 이유로 사용하지 않기로 결정하였다.

  • 굉장히 안 좋은 습관이 든다.
  • 컴파일 시간의 차이가 결국 라이브러리 한 문장 추가하는 것과 차이가 없다는 의견
  • CLion에서 헤더 인식을 못함 도대체 외않되?

Debugging Header (dbg.h)

dbg.h 헤더를 이용한 디버깅을 이용한다. printf를 이용해서도 할 수 있지만 우선 적어주기도 귀찮고(시간이 오래 걸리고), 온라인 저지에 제출할 때 지워줘야 하기 때문에 헤더를 이용하는 것을 추천한다. (또한, map과 같은 STL을 사용할 때 반복문 없이 모든 요소들을 print해 준다)

dbg.h 헤더는 이 주소의 헤더를 사용하였다. (설명법도 적혀 있다)

사용법으로는 우선 헤더를 인식 가능한 위치에 저장해 두고, 다음의 코드를 위에 추가해 준다.

1
2
3
4
5
#ifdef __APPLE__
#include "dbg.h"
#else
#define dbg(...)
#endif

간단한 코드인데, #ifdef __APPLE__ 에서 컴파일러가 Mac OS 임을 검사한다. 본인의 컴퓨터인 맥북에서는 dbg.h 헤더를 include하여 사용하고, 그 외에는 무시한다. 추가로, 윈도우의 경우에는 #ifdef WIN32#ifdef WIN64를 사용하면 될 것이다. (확인해보지 않았음)

이후, dbg(변수); 를 해주면 console 창에 변수의 값과 자료형이 적힌다.

C++에서 string 입력 받기

공백이 포함된 한 줄 전체를 string으로 받아올 때는 다음과 같이 getline을 사용할 수 있다.

1
2
string str;
getline(cin, str);

그래프 그려주는 툴

https://csacademy.com/app/graph_editor/

입력 개수가 명시되지 않은 입력 받기

C++의 경우에는 while(cin << n) 으로 받을수 있으며, C의 경우에는 다음과 같이 받을 수 있다.

1
2
3
4
int n;
while(scanf("%d",&n) != EOF) {
// code
}

{ } 로 컨테이너 값 입력하기

make_pair와 같은 함수를 사용하지 않고, 간단하게 { } 를 사용하여 값을 초기화해 줄 수 있다.

1
2
3
4
pair <int, int> p;
p = {3,4};
// this is same with
// p = make_pair(3,4);

stack, queue를 제외한 컨테이너(pair, vector, deque, set, list, array, tuple)에는 모두 적용 가능하다.

유용한 함수들

GCD

std::gcd(value1, value2) : 최대공약수 빠르게 구하기 (유클리드 호제법 사용 안해도 됨)
#include <numeric> 해주어야 한다.

특정 값으로 배열 초기화

memset(a, 2, sizeof(a)) : 배열 a를 2로 초기화 (for문 보다 빠를 수도 있다 - 컴파일러 따라 다름)
#include <cstring> 해주어야 한다.

여러 값의 min

min({a, b, c, d, ...}) 와 같이 쓰면, 여러 값들의 최소값을 한 번에 구할 수 있다.

push_back 대신 emplace_back

emplace_back()push_back() 보다 빠르다고 한다. 사용법은 같다.


출처1
출처2
출처3

Author

Yeonsang Shin

Posted on

2021-02-16

Updated on

2022-12-19

Licensed under

Comments