<링크>
https://www.acmicpc.net/problem/8979
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include<stdio.h> #include<algorithm> using namespace std; typedef struct C { int n, g, s, b,r; } C; int compare(C c1, C c2) { if (c1.g != c2.g) return c1.g > c2.g; if (c1.s != c2.s) return c1.s > c2.s; if (c1.b != c2.b) return c1.b > c2.b; } int main() { C arr[1000]; int N, K; scanf("%d%d", &N, &K); for (int i = 0; i < N; ++i) { int a, b, c, d; scanf("%d%d%d%d", &arr[i].n, &arr[i].g, &arr[i].s, &arr[i].b); } sort(arr, arr + N, compare); int i = 0; while (i < N) { int j = i; while (j < N && arr[j].g == arr[i].g && arr[j].s == arr[i].s && arr[j].b == arr[i].b) { arr[j].r = i; ++j; } i = j; } for(int i=0;i<N;++i) { if (arr[i].n == K) printf("%d", arr[i].r + 1); } } | cs |
<풀이>
처음엔 점수로 환산해서 풀어볼까 생각했지만
금:10점 은:5점 동:2점 이런식으로하면
은메달이 3개면 금메달 1개딴 나라보다 등수가 높아지게 된다.
여기서 생각을 멈췄기 때문에 노가다로 풀었다.
하지만 아무리 은메달을 많이 따도 금메달 1개 점수보다 작게끔 만들면 얘기가 달라진다.
메달 총개수는 100만개이므로 적절한 선을 찾으면 된다.
금메달 1개, 은메달 99만9999개를 땄을때
금메달의 점수가 은메달의 점수보다 100만배이상 차이나면 가능하다.
은메달과 동메달도 마찬가지다
동메달 : 1점
은메달 : 10^6점
금메달 : 10^12점 이면 충분히 가를 수 있다.
그렇게 총점을 환산한 후 나보다 잘한 국가들이 몇개있는지만 찾아주면 된다.
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> long long a[1001]; int main() { int N, K; scanf("%d%d", &N, &K); for (int i = 1; i<=N; ++i) { int n, g, s, b; scanf("%d%d%d%d", &n, &g, &s, &b); a[n] = g* 1e12 + s* 1e6 + b; } int ans = 1; for (int i = 1; i <=N; ++i) { if (a[i] > a[K]) ++ans; } printf("%d", ans); return 0; } | cs |
'알고리즘 풀이 > 기타' 카테고리의 다른 글
백준 1991 트리 순회 (0) | 2018.08.31 |
---|---|
백준 2621 카드게임 (0) | 2018.08.28 |
백준 13414 수강신청 (0) | 2018.08.02 |
백준 13413 오셀로 재배치 (0) | 2018.08.01 |
백준 10973 이전 순열 (0) | 2018.07.24 |