728x90
문제 :
올림픽 메달 순위 구하는 문제
해설 :
맨처음엔 배열로 해보다가 그냥 정렬하는게 낫겠다 싶어서
다중 페어벡터를 선언해서 정렬함수를 이용하여 정렬을 해줬다.
근데 순위가 같은 경우가 있어서 다중 반복문을 이용해 같은 걸 찾아주었다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, k, ans;
vector<pair<pair<int, int>, pair<int, int>>> v;
bool op(const pair<pair<int, int>, pair<int, int>>& a, pair<pair<int, int>, pair<int, int>>& b) {
if (a.first.second == b.first.second) {
if (a.second.first == b.second.first) {
return a.second.second > b.second.second;
}
else return a.second.first > b.second.first;
}
else return a.first.second > b.first.second;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(nullptr);
cin >> n >> k;
for (int i = 0; i < n; i++) {
int k, g, s, b;
cin >> k >> g >> s >> b;
v.push_back(make_pair(make_pair(k, g), make_pair(s, b)));
}
sort(v.begin(), v.end(), op);
for (int i = 0; i < n; i++) {
if (k == v[i].first.first) {
for (int j = 0; j < n; j++) {
if (j == i) continue;
else {
if (v[i].first.second == v[j].first.second) {
if (v[i].second.first == v[j].second.first) {
if (v[i].second.second == v[j].second.second) {
cout << j + 1;
return 0;
}
}
}
}
}
cout << i + 1;
}
}
}
코드가 너무 너무 더럽다ㅎ
다른 방법으로 금메달개수*숫자 + 은개수*숫자 + 동개수*숫자
해서 총 합이 가장 큰 순서대로 하면 괜찮을 거 같다는생각이 드는데
숫자를 몇으로 해야 답이 제대로 나올 지 모르겠다..
그래도 이 문제로 다중페어벡터 정렬 할 수 있게 되었음
728x90
'Algorithm > Solution' 카테고리의 다른 글
[백준] 1946 신입사원(C++) (0) | 2022.05.03 |
---|---|
[백준] 7576 7569 토마토(C++) (0) | 2022.04.27 |
[백준] 11140번 - LOL(C++) (0) | 2021.09.28 |
[프로그래머스] 문자열 다루기 기본 (0) | 2021.08.26 |
[프로그래머스] 위클리챌린지 4주차 - 직업군 추천하기(C++) (0) | 2021.08.26 |