알고리즘/문제 풀이

백준 17224번: APC는 왜 서브태크스 대회가 되었을까?

Themion 2022. 1. 13. 14:59

https://www.acmicpc.net/problem/17224

 

17224번: APC는 왜 서브태스크 대회가 되었을까?

2019년 올해도 어김없이 아주대학교 프로그래밍 경시대회(Ajou Programming Contest, APC)가 열렸다! 올해 새롭게 APC의 총감독을 맡게 된 준표는 대회 출제 과정 중 큰 고민에 빠졌다. APC에 참가하는 참가

www.acmicpc.net

문제를 역량별로 분류해 풀지 못하는 문제, 쉬운 문제만 풀 수 있는 문제, 어려운 문제도 풀 수 있는 문제로 나눠 그 개수를 센 뒤, 점수를 많이 받을 수 있는 문제부터 해결해 K개의 문제를 푼 뒤 얻은 총점을 출력한다.

#include <cstdio>

int min(int a, int b) { return a < b ? a : b; }

int main(){
    // N: 문제의 개수, L: 역량, K: 풀 수 있는 문제 수
    // sub1: 쉬운 문제의 난이도, sub2: 어려운 문제의 난이도, ans: 총점
    int N, L, K, sub1, sub2, ans = 0;
    // solve[i]: { 못 푼 문제, 쉬운 문제, 어려운 문제 }[i]를 푼 개수
    // score[i]: { 못 푼 문제, 쉬운 문제, 어려운 문제 }[i]의 점수
    short solve[3] = { 0, }, score[3] = { 0, 100, 140 };

    // 문제의 조건을 입력받으면서 각 문제에 대해
    for (scanf(" %d %d %d", &N, &L, &K); N--; ) {
        // 각 문제를 역량별로 분류해 문제수를 저장
        scanf("%d %d", &sub1, &sub2);
        solve[(sub2 <= L) + (sub1 <= L)]++;
    }

    // 각 분류에 대해 얻는 점수가 큰 순으로 문제를 푼다
    for (int i = 2; i; i--) {
        L = min(K, solve[i]);
        ans += L * score[i];
        K -= L;
    }

    // 문제를 풀어서 얻은 총점을 출력
    printf("%d\n", ans);

    return 0;
}