728x90
반응형

문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들 52

set처럼 vector에서도 중복된 것들 없애기, unique()

https://www.acmicpc.net/problem/1181 물론 set으로 중복된 것을 없애면서 정렬까지 가능하나. 벡터에서도 필요한 것만 하기 위해서 중복된 것을 없애는 작업을 알아보자 위 문제가 좋은 문제다. #include를 해줘야 쓸 수 있다. 쉽게 말하자면 값이 같고 뭉쳐있는 그룹은 리더가 대표하겠다 라고 생각하면된다. 값이 같아도 그룹이 나누어져 있으면 각 그룹의 대표를 가져오겠다는 말이다. **반환은 역시나 iterator를 반환한다. #예1 (정렬 x) // unique algorithm example #include // std::cout #include // std::unique, std::distance #include // std::vector bool myfunction (..

경계값 iterator 찾기 lower_bound() 와 upper_bound()

https://www.acmicpc.net/problem/18870 이 문제가 대표적인 예다. ** find로 경계값 찾는 것 보다 이게 더 빠르다. find는 O(N) 시간 복잡도를 가지기 때문이다. lower_bound는 이진탐색 기반이라 빠르다고 한다. **그래서 set 기본 메서드에도 lower_bound가 존재한다. [문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - set으로 중복없애고 자동 정렬하기 lower_bound(first, last, value)는 value보다 작은 값의 경계를 반환한다. upper_bound(first, last, value)는 value보다 큰 값의 경계를 반환한다. // lower_bound/upper_bound example #inc..

set으로 중복없애고 자동 정렬하기

set이용하기 #include 을 해야한다. 이진트리로 구현되어있음 **원소가 오름차순 또는 내림차순으로 정렬되어 저장된다는 점 내가 가지고 있는 vector vec을 set으로 만드려면 저렇게 선언하면 된다. //set은 중복을 제거하면서 sort도 함 set s(vec.begin(), vec.end()); 배열은 아래와 같이 set s(arr, arr+ 100); 일반적으로는 이렇다. set 변수 set 변수(복사할 변수) set 변수 = 복사할 변수 *** 하지만 set은 iterator가 bidirentional 이므로 원래 우리가 알던 연산이 안되는 경우가 있다 참고하자. 기본적으로 아래와 같이 iterator를 반환한다. s.begin() : set의 시작이 되는 주소 값 반환 s.end() ..

오름차순 정렬말고 comp로 sort 커스터마이징하기

sort에서 comp 함수 만들어서 비교하기 comp의 parameter는 내가 비교할 것이 무엇인지에 달렸다. pair는 아래와 같이 comp를 만든다. bool comp(pair x, pair y) { return x.first < y.first; } 구조체는 아래와 같이 comp를 만든다. struct Id{ int order; int age; string name; }; //const와 &을 받아옴 bool comp(const Id &p1, const Id &p2){ if(p1.age< p2.age){ return true; } else if(p1.age == p2.age){ return p1.order < p2.order; }else{ return false; } } 구성은 자유롭게 하면된다. ..

순열, 순서구분하고 선택하는 방법

순열에 아주 좋은 것 http://www.cplusplus.com/reference/algorithm/next_permutation/ next_permutation - C++ Reference function template std::next_permutation default (1)template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last); custom (2)template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last, Comp www.cplusplus.com 바로 next_permutation 함수다. 말 ..

컨테이너에서 특정 값 찾기 find()

라이브러리의 find가 있음 iterator를 인수로 받는다. 다만 find는 왼쪽부터 최초 원소만 찾고 find_if는 조건에 만족하는 모든 원소 찾음 #include #include #include using namespace std; bool isOdd(int n) { return n % 2 == 1; } int main() { vector v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(3); v.push_back(6); cout

컨테이너 원소들의 최대, 최소 그리고 최대 최소 비교

std::max_element, std::min_element, std::minmax_element #include 을 필요로 한다. 일반적으로 max(a,b) min(a,b)는 2개의 대해서만 최대 최소를 반환하지만 아래는 컨테이너에서 최대 최소를 반환한다. 최대 최소를 구하는 것들이다. 예를 들어 이렇게 쓸 수 있다. min만 원하면 min만 쓰고 max만 원하면 max만 쓰면 된다. 아래 예시는 최대값이다. 기본 형태 이 아래 2가지가 제일 많이 쓰일 듯 하다. max_element( ForwardIt first, ForwardIt last ); max_element( ForwardIt first, ForwardIt last, Compare comp ); ++여기서 fitst는 닫힌 구간이고 las..

728x90
반응형