티스토리 뷰
1. 10825번 국영수
-N명 학생의 국, 영, 수 점수와 이름이 주어짐
-정렬 조건
1) 국어 점수가 감소하는 순서
2) 국어 점수가 같으면, 영어 점수가 증가하는 순서
3) 국어, 영어 점수가 같으면 수학 점수가 감소하는 순서
4) 모두 같으면 이름이 사전 순으로 증가하는 순서
2. cmp 함수 사용 시(tuple 미사용)
bool cmp(const Person& u, const Person& v){
if(u.kor > v.kor){ // 국어 점수가 감소하는 순서
return true;
}else if(u.kor == v.kor){ // 국어 점수가 같으면
if(u.eng < v.eng){ // 영어 점수가 증가하는 순서
return true;
}else if(u.eng == v.eng){ // 영어 점수도 같으면
if(u.math > v.math){ // 수학 점수가 감소하는 순서
return true;
}else if(u.math == v.math){ // 수학 점수도 같으면
return u.name < v.name; // 이름이 증가하는 순서
}
}
}
return false;
}
=> 너무 복잡한 경우에 tuple 사용
2. 튜플(tuple)
-pair 의 확장 버전으로, pair는 2개의 타입 인자를 받지만, tuple은 2개 이상의 타입 인자를 받을 수 있다.
-예시
1)생성 및 초기화
- #include <tuple>
- using namespace std;
- typedef tuple<int, double, string> ids;
- int main()
- {
- // 생성자, tuple 초기화
- ids p1(10, 1.1f, "SooKkaRak");
- // 복사 생성
- ids p2(p1);
- }
2) make_tuple
- #include <tuple>
- using namespace std;
- typedef tuple<int, double, int, double> Mytuple;
- int main()
- {
- // 0, 1.f, 2, 3.f의 초기값을 이용해 tuple 생성
- Mytuple c0(0, 1.f, 2, 3.f);
- // 4, 5.f, 6, 7.f의 값으로 make_tuple을 이용해, tuple을 생성, c0에 대입 연산
- c0 = make_tuple(4, 5.f, 6, 7.f);
- return 0;
- }
3) 튜플 값 참조
get<INDEX>(TUPLE_NAME);
(예시)
- #include <tuple>
- using namespace std;
- typedef tuple<int, double, int, double> Mytuple;
- int main()
- {
- Mytuple c0(0, 1.f, 2, 3.f);
- cout << get<0>(c0) << endl; // 0 출력
- cout << get<1>(c0) << endl; // 1.f 출력
- cout << get<2>(c0) << endl; // 2 출력
- cout << get<3>(c0) << endl; // 3.f 출력
- return 0;
- }
4) 더 자세한 내용은
http://egloos.zum.com/sweeper/v/2994673
3. 튜플(tuple) 사용 시
-tuple 이나 pair 의 값을 서로 비교할 경우, 첫 번째 값으로 비교 후, 같으면 그 다음 값으로 비교
bool cmp(const Person& u, const Person& v){
return make_tuple(-u.kor, u.eng, -u.math, u.name) < make_tuple(-v.kor, v.eng, -v.math, v.name);
}
'백준 알고리즘 기초 강좌' 카테고리의 다른 글
5장 정렬 - (7) 정렬 응용 문제 (0) | 2017.10.14 |
---|---|
5장 정렬 - (7) 10989번(수 정렬하기 3) (0) | 2017.10.14 |
5장 정렬 - (5) Stable Sorting (0) | 2017.10.10 |
5장 정렬 - (4) 11651번 좌표 정렬하기2 (0) | 2017.10.10 |
5장 정렬 - (3) 11650번 좌표 정렬하기(비교 함수, 연산자 오버로딩 사용) (0) | 2017.10.10 |