총정리

gksrudtlr
|2025. 2. 19. 09:08

STL

  • STL이란?
    • C++ 내장 템플릿 기반 라이브러리
    • 크게 컨테이너, 반복자, 알고리즘으로 구성
  • 종류
    •  Vector
      • 동적으로 구현된 컨테이너
      • 연속적 메모리 블럭을 사용해 랜덤 접근이 가장 빠름
      • 원소를 추가/삭제할 때 마지막 원소에 대해 가장 효율적
    • Map
      • Key, value를 한쌍으로 묶어 관리
      • 키는 유일하며 검색 삽입 삭제가 평균적으로 O(logN)
    • set
      • 키만 저장 가능, value가 따로 필요 없을 때 사용
      • 중복이 불가하며 이미 원소가 존재하지 않으면 다시 넣어도 들어가지 않음
      • 검색 삽입 삭제가 평균 O(logN)
    • multimap
      • 하나의 키에 여러 값을 저장할 수 있는 맵
    • multiset
      • 동일한 값을 중복으로 허용하는 set
    • priority_queue
      • queue와 달리 선입 선출이 아니라 들어온 값들의 우선 순위를 부여해 우선순위 순서대로 되어있는 큐
      • 내부적으로는 힙 구조를 사용
      • 삽입/삭재는 항상 O(logN), top()은 가장 우선 순위가 높은 원소로 조회시 O(1)
      • 가장 큰/작은 원소를 순식간에 추출하는 문제에서 최적

반복자

  • 반복자란?
    • Iterator는 데이터를 순차적으로 접근할 수 있게 해주는 객체
    • STL용 포인터
  • 종류
    • reverse_iterator
      • 컨테이너를 역순으로 순회할 때 사용
      • rbegine(), rend()를 사용
    • 상수 반복자(const_iterator)
      • 컨테이너의 데이터를 수정할 수 없는 반복자
      • read only용도로만 사용
    • 삽입 반복자
      • 컨테이너에 새로운 원소를 삽입할 때 사용
      • back_inserter, front_inserter, inderter가 있음

레드블렉 트리

  • 래드블랙 트리란?
    • 이진 탐색 트리의 일종으로 편향되지 않고 트리의 높이를 logN으로 유지
    • 노드가 빨간색인지 검은색인지 판단해 균형잡힌 트리를 만들어 탐색 속도가 빨라짐
  • 규칙
    • 균형을 이뤄야함
      • 깊이를 기준으로 검은 리본의 갯수가 어디서나 같이야 함
    • 빨간 리본이 이어지면 안됨
      • 빨간 리본을 단 나무가 연달아 나오면 재배치
      • 이 규칙 덕분에 균형을 이룸
    • 최상위 부모 노드는 검은색
  •  데이터 추가
    • 새로 추가하는 노드는 빨간색으로 추가 후 빨간 리본이 이어지면 재배치
  • 데이터 삭제
    • 검은 리본이 없어지면 같은 층의 검은 리본의 갯수가 깨질 수 있어 나무 위치 조정

STL 함수

순열

  • 순열이란?
    • 순서가 정해져있는 수의 배열
    • STL 제공되는 next_permutation/perv_permutation을 사용하면 편하게 값을 구할 수 있음
    • 이미 정렬된 상태의 컨테이너 사용

 

k 번째 값

  • nth_element
    • pivot 기반 n번째 작은 원소를 배열의 n 번째 위치로 보낸 뒤, 그 왼쪽은 n 보다 작은 원소, 오른쪽은 큰 원소로 반 정렬 됨
    • 퀵소트와 유사
    • 편균 시간 복잡도는 O(n)

 

연속합 구하기

  • partial_sum
    • numeric 헤더에 포함된 함수
    • 컨테이너의 시작부터 끝까지 누적합을 구해 새로운 컨테이너에 저장

 

유니크 값 구하기

  • unique
    • 연속된 중복 원소를 제거하여(끝 위치) iterator를 반환하는 함수
    • 정렬이 필요한 함수로
    • erase등을 사용하여 iterator부터 컨테이너의 끝부분까지 삭제해 중복된 값을 제거해야함

 

총 합 구하기

  • accumulate
    • numeric 헤더에 포함된 함수
    • 컨테이너의 총 합을 구하는데 사용
    • 기본 초기값은 0 또는 원하는 값으로 사용 가능
    • 4번째 인자에 따라 다른 사칙연산도 가능

 

빠른 이진 탐색

  • 정렬된 구간에서 이진 탐색을 깔끔히 제공
  • 이진 트리를 탐색해 원하는 값을 찾을 수 있음
  • 시간 복잡도 O(logN)
  • lower_bound
    • x 이상의 값이 처음 나오는 위치를 찾음
  • upper_bound
    • x 초과의 값이 처음 나오는 위치를 찾음

 

원소 변환

  • transform
    • 1,2 인자 : 변환할 원소들의 입력구간
    • 3 인자 : 변환된 원소들을 저장할 출력 구간의 시작 위치
    • 4 인자 : 각 원소에 적용할 변환 함수
    • 단항 연산
      • 각 원소를 하나씩 반환
      • ex) 제곱, 2배 ...
    • 이항 연산
      • 두 구간의 원소들을 짝지어 변환
      • ex) 같은 인덱스끼리 합, 곱하기 ...

 

최대/최소 값 탐색

  • max_element
    • 컨테이너에서 최대 값을 가진 이터레이터를 반환
  • min_element
    • 컨테이너에서 최소 값을 가진 이터레이터를 반환

 

특정 조건을 만족하는 원소 구하기

  • count
    • 단순 값만 비교
  • count_if
    • 사용자 조건을 정의 가능

 

이터레이터 이동

  • distance
    • 첫번째 이터레이터와 두번째 이터레이터의 거리(두 개의 차)를 반환
  • advance
    • 이터레이터를 원하는 위치로 이동

코테 노하우

헤더 파일

  • #include <bits/stdc++.h>
    • GCC전용 헤더로 c++ 표준 라이브러리를 모두 포함시킴
    • 사용 불가할 때도 있음

효율적 입출력

  • ios::sync_with_stdio(false), cin.tie(nullptr)
    • c 표준 입출력과 c++스트림을 분리해 동작하게 하여 버퍼링 효율이 좋아짐
  • \n
    • endl을 사용하면 출력 버퍼가 강제로 flush돼서 느려질 수 있으나 큰 문제의 반복 출력할땐 \n이 선호
  • getline(cin, string)
    • 문자열 전체를 입력받는 함수
    • 공백이나 탭 같은 구분 문자도 읽을 수 있음
    • 한줄 통째로 string에 저장

문제풀이 팁

  1. 제한 사항과 입력 크기 다시보기
    • 입력 크기와 시간 제한 확인
  2. 예외 케이스 챙기기
    • 문제 풀었을 때 틀렸다면 예외 케이스를 챙겨 다시 풀기
  3. 빠른 코딩 테스트 제출
    • 빠르게 초기 코드르 짜 제출한 뒤 틀렸다면 빠르게 정
 
 

'Unreal Bootcamp > Challenge' 카테고리의 다른 글

해시 테이블  (0) 2025.03.18
정렬  (0) 2025.03.18
알고리즘 함수 및 코테 꿀팁  (0) 2025.02.18
알고리즘 함수 연습  (0) 2025.02.18
우선순위 큐와 알고리즘들  (0) 2025.02.10