[C++] 유용한 PS 트릭

KKanata·2025년 3월 2일
0

C++

목록 보기
1/3

1. 주의사항

PS를 함에 있어 후술할 몇몇 트릭들이 문제를 더 효율적으로 풀도록 도움을 줄 수도 있다.
그러나 일부 기법들은 근본적으로 별로 좋지 않은 방법임을 항상 염두에 두어야 한다.
따라서 현명하게 상황에 맞춰서 적절히 취사선택해서 사용하는 것을 권장한다.

2. 트릭

2.1 매크로

  • #define all(x) begin(x), end(x) : 컨테이너의 모든 원소에 대한 매크로

  • #define int long long : int 범위 초과 시, 일괄 수정이 필요할 때 (signed main())

  • #define rep(i, a, b) for (int i = (a); i < (b); ++i) : 반복문 매크로

  • #define debug(x) cout << #x << " is " << x << '\n' : 디버깅 (문자열화 연산자 #)

2.2 함수

  • lower_bound(all(v), x) : x 보다 크거나 같은 첫번째 원소의 위치

  • upper_bound(all(v), x) : x 보다 큰 첫번째 원소의 위치

  • next_permutation(all(v)) : 사전순으로 다음에 위치한 순열

  • prev_permutation(all(v)) : 사전순으로 이전에 위치한 순열

  • iota(all(v), x) : 컨테이너 첫 번째를 x 로 하고, ++x 를 하며 채움

2.3 문법

  • for(auto& x : v) : 범위 기반 for 루프 (원본)

  • for(auto x : v) : 범위 기반 for 루프 (사본)

  • pair<int, int> p = {1, 2} : 중괄호 초기화 (=make_pair(1, 2))

  • auto [a, b] = p : 구조적 바인딩 (= auto a = p.first, b = p.second)

2.4 수학

  • max({a,b,c,...}) : 최대 원소

  • min({a,b,c,...}) : 최소 원소

  • a ^ b ^ c ^ min({ a,b,c }) ^ max({ a,b,c }) : 중간값

  • acos(-1) : π

  • n & 1 : 홀짝 판별

  • (n >> k) & 1 : n의 2진법 상 k + 1 번째 비트

2.5. 입출력

  • cin.tie(0)->sync_with_stdio(0) : 한 줄로 줄일 수 있다.

  • cout << format("{:.2f}", x) : 포맷 출력. (백준 C++23 이상)

  • cout << " \n"[i + 1 == N] : 반복문이 끝나는 경우 \n, 그외  

  • "FFFFFFDCBAA"[n / 10] : 문자열로 조건문 압축 ( 백준 9498 시험 성적 )

  • cout << dec/oct/hex << x : 10진수, 8진수, 16진수 변환

profile
CSE 21

0개의 댓글