https://www.acmicpc.net/problem/14593
14593번: 2017 아주대학교 프로그래밍 경시대회 (Large)
아주대학교 프로그래밍 경시대회(Ajou Programming Contest, APC)는 2009년 제1회를 시작으로 2014년 제6회까지 개최된 아주대학교 학생들을 위한 프로그래밍 경시대회이다. 2017년, 다른 학교에서 활발히
www.acmicpc.net
문제 분석
문제의 설명중 대부분은 실제 경시대회 규칙인듯하여, 중요한 부분만 뽑아 분석하자.
! 해결한 문제 점수의 총합이 높은 참가자가 더 높은 순위를 가진다.
! 점수의 총합이 같은 경우, 제출 횟수가 적은 참가자가 더 높은 순위를 가진다.
! 점수의 총합과 제출 횟수가 같은 경우, 마지막으로 점수를 획득한 문제의 업로드 시간이 빠른 참가자가 더 높은 순위를 가진다.
이 3가지 조건을 잊지말자.
입력 : 첫 번째 줄에는 참가자의 수 // 두 번째 줄부터 N개의 줄에 걸쳐 세개의 정수 S,C,L이 주어진다
출력 : 1등을 한 참가자의 번호를 출력한다.
코드
#include <iostream>
#include <string>
#include <algorithm>
#include<vector>
using namespace std;
struct score {
int s, c, l,ord;
};
bool compare(score a, score b) {
if (a.s == b.s && a.c == b.c ) return a.l < b.l;
// 점수의 총합과 제출 횟수가 같은 경우,
// 마지막으로 점수를 획득한 문제의 업로드 시간이 빠른 참가자가 더 높은 순위를 가진다.
if (a.s == b.s ) return a.c < b.c;
// 점수의 총합이 같은 경우, 제출 횟수가 적은 참가자가 더 높은 순위를 가진다.
return a.s > b.s;
// 해결한 문제 점수의 총합이 높은 참가자가 더 높은 순위를 가진다.
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
vector<score> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i].s >> v[i].c >> v[i].l;
v[i].ord = i+1;
}
sort(v.begin(), v.end(), compare);
cout << v[0].ord;
return 0;
}
문제 풀이
우선, 참가자의 등수를 판가름 할 수 있는 기준점이 3개나 입력으로 들어오기 때문에
여러모로 복잡할 수 있다.
그래서 참가자의 객체화(Struct 사용)을 통해 관리해주었다 + 참가자의 번호도 같이
참가자의 순위를 결정할 때에는 sort 함수를 사용하였는데, sort 함수의 3번째 인자를 이용하여
정렬을 본인의 입맛대로 할 수 있다.
1. 업로드 시간이 더 빠르다는 것은 크기가 작다는 뜻으므로 '<' 부등호를 사용하여 return한다.
2. 제출 횟수가 적은 것이 우선순위이므로 a.c < b.c의 bool 값을 return한다.
3. 모든 비교조건에 해당하지 않아, 점수의 총합을 비교해야할 땐 a.s > b.s의 bool 값을 return한다.
※ 복잡한 비교를 제일 상단의 if문안에 적어주어야 한다!
if(~~~){
if(~~~){
~~~
}
}
와 같이 이중 if문?을 사용하지 않으려면 말이다.
참조
https://atomic0x90.github.io/c++/2020/02/22/c++-sort.html
원문
https://blog.naver.com/oh2279/222641547651
[백준/C++] 14593번 2017 아주대학교 프로그래밍 경시대회 (Large)
https://www.acmicpc.net/problem/14593 문제 분석 문제의 설명중 대부분은 실제 경시대회 규칙인듯하여, ...
blog.naver.com
'Koala - 5기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준 / python] 2566번 최댓값 (0) | 2022.02.12 |
---|---|
[백준/C++] 2493번 탑 (1) | 2022.02.09 |
[백준/python] - 13410번: 거꾸로 구구단 (0) | 2022.02.07 |
[백준/python] 10773번 제로 (0) | 2022.02.07 |
[백준/python] 6996번 애너그램 (0) | 2022.02.07 |