-
[BOJ] 백준 23246 Sport Climbing Combined c++ 코드 / 풀이Algorithm/BOJ 2023. 11. 1. 17:37
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
대략 2년전에 진짜 코린이 일 때 풀었던 문제.... 문제해설
난이도 자체가 낮기에 문제도 엄청 쉬운 편
간단하게 그냥 세가지 종목의 순위를 곱한게 선수의 점수가 되고, 점수가 같을 경우 순위의 합산 점수가 낮은 선수가 이기는 것
위의 기준을 적용해서 오름차순으로 정렬하고 1,2,3등을 출력해주면 되는 문제
문제풀이
먼저 순위를 곱한 걸 점수로, 점수가 같다면 합산 순위로 정렬을 한 후 금 은 동을 출력해주면 됨
코드설명
나도 오랜만에 보는 구조체구조체에 선수 번호, 각 세 종목의 순위, 순위를 곱한 점수, 합산 순위를 저장
이를 위에 적어놓은 기준에 맞춰서 반복문을 통해 오름차순으로 정렬하고 0,1,2번 선수의 선수 번호를 출력
코드
#include<iostream> #include<string> #include<cstdio> #include<cstdlib> #include<vector> #include<algorithm> using namespace std; typedef struct { int num; int a, b, c; int sum, mul; }player; int main() { int N; vector<player> v; cin >> N; player a; for (int i = 0; i < N; i++) { cin >> a.num >> a.a >> a.b >> a.c; a.sum = a.a + a.b + a.c; a.mul = a.a * a.b * a.c; v.push_back(a); } for (int i = 0; i < N-1; i++) { for (int j = i + 1; j < N; j++) { if (v[j].mul < v[i].mul) { a = v[j]; v[j] = v[i]; v[i] = a; } else if (v[j].mul == v[i].mul) { if (v[j].sum < v[i].sum) { a = v[j]; v[j] = v[i]; v[i] = a; } else if (v[j].sum == v[i].sum) { if (v[j].num < v[i].num) { a = v[j]; v[j] = v[i]; v[i] = a; } } } } } cout << v[0].num <<" "<< v[1].num <<" "<< v[2].num << "\n"; }
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 백준 5430 AC c++ 코드 / 풀이 (0) 2023.11.05 [BOJ] 백준 15683 감시 c++ 코드 / 풀이 (1) 2023.11.02 [BOJ] 백준 16953 A → B c++ 코드 / 풀이 (0) 2023.11.01 [BOJ] 백준 1107 리모컨 c++ 코드 / 풀이 (1) 2023.11.01 [BOJ] 백준 6064 카잉달력 c++ 코드/풀이 (0) 2023.10.31