
https://www.acmicpc.net/problem/23246
23246번: Sport Climbing Combined
입력은 표준입력을 사용한다. 첫째 줄에 선수의 명수를 나타내는 양의 정수 $n$ ($3 \le n \le 100$)이 주어진다. 이어 $n$개의 줄 각각에 네 정수 $b_i$, $p_i$, $q_i$, $r_i$가 주어지는데, $b_i$는 $i$번째 선수
www.acmicpc.net
문제 풀이
compare함수를 이용해 sort를 할 때 곱한 점수, 더한 점수를 고려해 sort를 해주었다.
vector에는 id,(곱한점수, 더한점수)를 저장했다.
소스 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int, pair<int, int>>> player;
bool compare(pair<int, pair<int, int>> a, pair<int, pair<int, int>>b) {
	if (a.second.first < b.second.first) {
		return true;
	}
	else if (a.second.first == b.second.first) {
		if (a.second.second < b.second.second)
			return true;
		else if (a.second.second == b.second.second) {
			if (a.first < b.first)
				return true;
			else
				return false;
		}
			return false;
	}
	else
		return false;
}
int main() {
	int n;
	cin >> n;
	//입력을 받는 작업
	for (int i = 0; i < n; i++) {
		int p, q, r, z;
		cin >> p >> q >> r >> z;
		int mul = q * r * z;
		int sum = q + r + z;
		player.push_back(make_pair(p, make_pair(mul, sum)));
	}
	//compare를 이용한 정렬
	sort(player.begin(), player.end(), compare);
	
	//출력
	for (int i = 0; i < 3; i++) {
		cout << player[i].first << '\n';
	}
}'알고리즘' 카테고리의 다른 글
| [백준] 20040번 사이클 게임 C++ 문제풀이 (0) | 2023.10.05 | 
|---|---|
| [백준] 20044번 Project Teams C++ 문제풀이 (1) | 2023.10.03 | 
| [백준] 23247번 Ten C++ 문제풀이 (1) | 2023.09.29 | 
| [백준] 25953번 템포럴 그래프 C++ 문제풀이 (0) | 2023.09.23 | 
| [백준] 25945번 컨테이너 재배치 C++ 문제풀이 (0) | 2023.09.23 | 
