https://www.acmicpc.net/problem/8979
<์์ฝ>
์ฌ๋ฆผํฝ ์์ ๋งค๊ธฐ๊ธฐ
์กฐ๊ฑด 1. ๊ธ๋ฉ๋ฌ ์๊ฐ ๋ง์ ๋๋ผ
์กฐ๊ฑด 2. ๊ธ๋ฉ๋ฌ ์๊ฐ ๊ฐ์ผ๋ฉด, ์๋ฉ๋ฌ ์๊ฐ ๋ ๋ง์ ๋๋ผ
์กฐ๊ฑด 3. ๊ธ, ์๋ฉ๋ฌ ์๊ฐ ๋ชจ๋ ๊ฐ์ผ๋ฉด, ๋๋ฉ๋ฌ ์๊ฐ ๋ ๋ง์ ๋๋ผ
n๊ฐ์ ๊ตญ๊ฐ๋ฅผ ์ ๋ ฅ ๋ฐ๊ณ , k๋ฒ์งธ ๋๋ผ๋ ๋ช ๋ฑ์ ํ๋์ง ์ถ๋ ฅ
https://blog.naver.com/mms0801/221887013596
์ฒ ์ ํ ์ด ๋ธ๋ก๊ทธ์ ๋์์ ๋ฐ์๋ฐ
์ด ์ฝ๋๋ 8์ ์ง๋ฆฌ ์ฝ๋์ 100์ ์ง๋ฆฌ ์ฝ๋๋ก ๋๋์ด์ง๋๋ค๐
#include <iostream>
using namespace std;
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, k;
cin >> n >> k;
int a, b, c;
int A[1001] = { 0 }, B[1001] = { 0 }, C[1001] = { 0 };
int total[1001] = { 0 };
for (int i = 1; i <= n; i++) {
int num;
cin >> num;
if (num == k) {
cin >> a >> b >> c;
}
else {
cin >> A[i] >>B[i] >> C[i];
}
}
int rank = 0;
for (int i = 1; i < n; i++) {
if (A[i] > a) rank++;
else if (A[i] == a && B[i] > b) rank++;
else if (A[i] == a && B[i] == b && C[i] > c) rank++;
}
cout << rank+1;
return 0;
}
์ด ์ฝ๋๋ n์ด 2์ธ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ตญ๊ฐ์ ์๋ฉ๋ฌ ๋ฐ ๋๋ฉ๋ฌ ํ๋ ์๊ฐ 0์ธ ๊ฒฝ์ฐ, n<=500์ธ ๊ฒฝ์ฐ๋ฅผ ์ถฉ์กฑํ์ง ๋ชปํ๋ค.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct {
int num;
int gold;
int silver;
int bronze;
int rank;
}nation; //nation ๊ตฌ์กฐ์ฒด ์ ์
bool compare(nation x, nation y) { //๊ณ ๋ ค ๊ธฐ์ค์ด ๋ง์ ๋ ๊ตฌ์กฐ์ฒด ์ด์ฉ
if (x.gold == y.gold) {
if (x.silver == y.silver)
return x.bronze > y.bronze;
else return x.silver > y.silver; // ์๋ฉ๋ฌ ๋ด๋ฆผ์ฐจ์ ์ ๋ฆฌ
}
else return x.gold > y.gold; // ๊ธ๋ฉ๋ฌ ๋ด๋ฆผ์ฐจ์ ์ ๋ฆฌ
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, k,result=0;
cin >> n >> k;
vector<nation> medal(n + 1); //i=1๋ถํฐ ์์
for (int i = 1; i <= n; i++) {
cin >> medal[i].num >> medal[i].gold >> medal[i].silver >> medal[i].bronze;
}
sort(medal.begin() + 1, medal.end(), compare);
int currank = 1;
for (int i = 1; i <= n; i++) {
if (medal[i].gold == medal[i - 1].gold && medal[i].silver == medal[i - 1].silver
&& medal[i].bronze == medal[i - 1].bronze) { // ๋ฉ๋ฌ ์๊ฐ ๊ฐ์ผ๋ฉด
medal[i].rank = currank; // ํ์ฌ ๋ฑ์๋ก ์ฑ์์ค
}
else {
currank = i; // ๊ทธ๊ฒ ์๋๋ฉด ํ์ฌ ๋ฑ์๋ฅผ i๋ก ์ฑ์์ค
medal[i].rank = i; // ํ์ฌ ๋ฑ์๋ก ์ฑ์์ฃผ๊ธฐ
}
if (medal[i].num == k) { // ์ฐพ๊ณ ์ ํ๋ ๋๋ผ๊ฐ ๋์ค๋ฉด
result = medal[i].rank;
break;
}
}
cout << result;
return 0;
}
ํ ์ผ๋จ ๋ด๊ฐ ๋ง๋ ์ฝ๋๊ฐ 8์ ์ด๋ผ๋๊ฒ ๋๋ฌด ์ถฉ๊ฒฉ์ด์๊ณ ใ ใ ใ ใ ๋์ฒด ์ด๋ป๊ฒ ํด์ผ 100์ ์ธ ๊ฑด์ง๋ ๋ชจ๋ฅด๊ฒ ๋ ๋ฌธ์ ์๋ค. ๊ทธ๋์ ์์นํด์ ์ ๋ธ๋ก๊ทธ ๋ฐ๊ฒฌํ๊ณ ๊ณต๋ถํ์๋ ์๊ฐ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์๋น