728x90
반응형

문제풀이(Problem Solving) 326

백준, BOJ, 1181번 C++ [CPP]

쉬운 문제지만 sort에서 cmp를 이용하는 문제고 문자열을 이용해서 익혀볼만 하다. https://www.acmicpc.net/problem/1181 [문제풀이(Problem Solving)/C++ 문제풀이에 유용한 것들] - set처럼 vector에서도 중복된 것들 없애기, unique() 위 글이 도움이 될 것이다. #맞는 풀이 #include #include #include #include using namespace std; int N; vector vec; bool cmp(string s1, string s2){ //길이가 작은 것이면 앞으로 if(s1.length() < s2.length()){ return true; }else if(s1.length() == s2.length()){ // ..

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 (..

백준, BOJ, 18870번 C++ [CPP]

어렵지 않았지만 방법이 조금 틀렸다. https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net find에 대한 오해가 생겨서 시간 초과가 났다. # 시간 초과 풀이 #include #include #include #include using namespace std; int N; vector vec; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> N; ..

경계값 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

728x90
반응형