피너클의 it공부방
백준 8979 올림픽 (c++) : 피너클 본문
728x90
반응형
https://www.acmicpc.net/problem/8979
그냥 정렬 문제다.
long long n, k;
vector<tuple<long long, long long, long long, int>> v;
사용할 변수다.
v에는 <금메달, 은메달, 동메달, 번호> 가 들어간다.
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++) {
long long a, b, c, d;
cin >> a >> b >> c >> d;
v.push_back(make_tuple(b, c, d, a));
}
long long sum = 0;
sort(v.begin(), v.end(), cmp);
for (long long i = 0; i < n; i++) {
if (get<3>(v[i]) == k) break;
sum++;
}
cout << sum + 1 << endl;
}
그냥 입력받고 정렬하고 번호가 k가 나올때까지 반복문 돌린뒤
sum+1을 출력하면 된다.
bool cmp(tuple<long long, long long, long long, int>a, tuple<long long, long long, long long, int>b) {
if (get<0>(a) > get<0>(b)) return true;
else if (get<0>(a) < get<0>(b)) return false;
else {
if (get<1>(a) > get<1>(b)) return true;
else if (get<1>(a) < get<1>(b)) return false;
else {
if (get<2>(a) > get<2>(b)) return true;
else if(get<2>(a) < get<2>(b)) return false;
else {
if (get<3>(a) == k) return true;
else return false;
}
}
}
}
정렬할땐 위처럼 비교해서 정렬한다.
그냥 금메달 더 많은놈, 은메달 더 많은놈, 동메달 더 많음놈 이렇게 가면 된다.
하지만 마지막에
else {
if (get<3>(a) == k) return true;
else return false;
}
}
}
}
금 은 동 전부 같은 경우에는 k가 무조건 앞으로 가게 해주면 된다.
이렇게 하면 금 은 동 전부 같은 놈들 중에는 k가 맨 앞으로 가게 된다.
그럼 자연스럽게 성립된다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
using namespace std;
long long n, k;
vector<tuple<long long, long long, long long, int>> v;
bool cmp(tuple<long long, long long, long long, int>a, tuple<long long, long long, long long, int>b) {
if (get<0>(a) > get<0>(b)) return true;
else if (get<0>(a) < get<0>(b)) return false;
else {
if (get<1>(a) > get<1>(b)) return true;
else if (get<1>(a) < get<1>(b)) return false;
else {
if (get<2>(a) > get<2>(b)) return true;
else if(get<2>(a) < get<2>(b)) return false;
else {
if (get<3>(a) == k) return true;
else return false;
}
}
}
}
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++) {
long long a, b, c, d;
cin >> a >> b >> c >> d;
v.push_back(make_tuple(b, c, d, a));
}
long long sum = 0;
sort(v.begin(), v.end(), cmp);
for (long long i = 0; i < n; i++) {
if (get<3>(v[i]) == k) break;
sum++;
}
cout << sum + 1 << endl;
}
전체코드다.
728x90
반응형
'백준' 카테고리의 다른 글
| 백준 1533 길의 개수 (c++) : 피너클 (0) | 2025.10.03 |
|---|---|
| 백준 12850 본대 산책 2 (c++) : 피너클 (0) | 2025.09.25 |
| 백준 10217 KCM Travel (c++) : 피너클 (0) | 2025.09.14 |
| 백준 20437 문자열 게임 2 (c++) : 피너클 (0) | 2025.09.13 |
| 백준 15927 회문은 회문아니야 (c++) : 피너클 (0) | 2025.09.13 |
Comments