본문 바로가기

공부하는 것들/알고리즘

백준 17224 : APC는 왜 서브태스크 대회가 되었을까?(그리디)

www.acmicpc.net/problem/17224

 

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

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

www.acmicpc.net

 

프로그래밍 대회에 문제 N개가 다음 조건으로 주어진다.

1. 문제는 난이도 순으로 배열되어 있음.

2. 모든 문제는 easy/hard 버전으로 존재. (easy = 100점, hard = 40점)

3. hard를 풀 수 있는 경우, easy는 풀지 않는다. (득점 = 140점)

4. easy만 풀거나 hard만 푸는 경우 모두 한개의 문제를 푼 것으로 센다.

5. 현정이는 난이도 L까지의 문제를 풀 수 있고, 시간 내에 K개의 문제를 풀 수 있다. 

 

Input : N, L, K ( 문제의 갯수, 역량, 풀 수 있는 최대갯수)

            easy, hard

Output : 점수의 최댓값.

 

def solve(L,K,tasks):
    que = tasks.copy()
    solved = 0
    score = 0
    while que:
        if solved >= K : break
        easy, hard = que.pop(0)
        if hard<=L :
            score += 140
            solved += 1
        elif easy<=L:
            score += 100
            solved += 1
        else: break
    return score

    
if __name__=='__main__':
    N,L,K = list(map(int,input().split()))
    tasks = []
    for _ in range(N):
        tasks.append(list(map(int,input().split())))
    ans = solve(L,K,tasks)
    print(ans)

 

문제 풀이: 

풀어야 하는 tasks를 돌면서, hard를 풀 수 있는 경우와 easy만 풀 수 있는 경우로 나눴다.

문제는 난이도 순이라 했으니, easy를 못 풀고 else 문으로 넘어간 경우에는, 다음 문제도 풀 역량이 안되니, while문을 탈출한다.

K개의 문제를 푼 경우에는, 남은 문제의 난이도와 상관없이 while 문을 탈출한다.

 

##easy, hard는 난이도가 아닌 점수이므로 140, 100을 더해줘야함