Uknow's Lab.
article thumbnail

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 구조체를 만들고,

금 - 은 - 동메달 순서로 타겟 국가보다 성적이 좋은 나라를 카운팅합니다.

 

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.