https://www.acmicpc.net/problem/8979
8979번: 올림픽
입력의 첫 줄은 국가의 수 N(1 ≤ N ≤ 1,000)과 등수를 알고 싶은 국가 K(1 ≤ K ≤ N)가 빈칸을 사이에 두고 주어진다. 각 국가는 1부터 N 사이의 정수로 표현된다. 이후 N개의 각 줄에는 차례대로 각
www.acmicpc.net
난이도 : 실버 5
태그 : 정렬, 구현
설명
금메달 - 은메달 - 동메달 우선순위로 순위를 정해 특정 국가가 몇등인지 출력하는 서브테스크 문제입니다.
서브테스크는 특정 조건을 충족할때마다 배점을 주는 방식인데, 그냥 부분점수가 있다 생각하면 됩니다.
특정 국가의 등수를 구하는 문제이기 때문에,
모든 국가의 등수를 하나하나 구할 필요 없이
특정 국가보다 성적이 높은 나라만 카운트 하면 됩니다.
소스코드
#include <stdio.h>
#include <stdlib.h>
struct Medal {
int country;
int gold;
int silver;
int bronze;
};
int main() {
int n, k;
scanf("%d %d", &n, &k);
struct Medal *medals = malloc(n * sizeof(struct Medal));
int targetCountry = 0;
for (int i = 0; i < n; i++) {
scanf("%d %d %d %d", &medals[i].country, &medals[i].gold, &medals[i].silver, &medals[i].bronze);
if (medals[i].country == k) {
targetCountry = i;
}
}
int rank = 0;
for (int i = 0; i < n; i++) {
if(i != targetCountry) {
if (medals[i].gold > medals[targetCountry].gold) {
rank++;
} else if (medals[i].gold == medals[targetCountry].gold) {
if (medals[i].silver > medals[targetCountry].silver) {
rank++;
} else if (medals[i].silver == medals[targetCountry].silver) {
if (medals[i].bronze > medals[targetCountry].bronze) {
rank++;
}
}
}
}
}
printf("%d", rank + 1);
}
각 국가의 번호와 메달 수를 담을 Medal 구조체를 만들고,
금 - 은 - 동메달 순서로 타겟 국가보다 성적이 좋은 나라를 카운팅합니다.
'코딩테스트 > C | C++' 카테고리의 다른 글
[백준 3447번] [C언어] 버그왕 (0) | 2022.11.29 |
---|---|
[백준 4158번] [C언어] CD (0) | 2022.11.28 |
[백준 9339번] [C] 마라토너 (0) | 2022.11.15 |
[백준 2704번] [C] 이진법 시계 (0) | 2022.11.15 |
[백준 25205번] [C] 경로당펑크 2077 (0) | 2022.10.14 |