알고리즘

2차원 배열 정렬을 배우기 좋은 APC는 왜 서브태스크 대회가 되었을까?

메밀국수가생각나 2022. 1. 13. 08:53

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

 

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

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

www.acmicpc.net

 

<해당 문제의 나의 풀이>

N, L, K = map(int, input().split())
subtask = []
score = 0
count = 0

for i in range(N):
    sub1, sub2 = map(int, input().split())
    subtask.append([sub1, sub2])
    
subtask.sort(key=lambda x:x[1])

for lst in subtask:
    if count >= K:
        break
    sub1, sub2 = lst[0], lst[1]
    if L >= sub1:
        score += 100
        count += 1
    if L >= sub2:
        score += 40
    
print(score)

 

<해설>

위 문제의 핵심은 2차원 배열을 정렬하여야 한다는 것입니다. 왜냐하면, 해당 문제의 최대 풀 수 있는 문제 수가 정해져 있습니다. 그런데, 역량이 부족하여 2번째 어려운 보너스 부분 점수를 못 받는 문제를 먼저 풀어버리면 문제 풀이 수가 증가하여 최대한 받을 수 있는 점수가 줄어들게 됩니다. 따라서 최대한 많은 점수를 얻기 위해서는 어려운 문제 기준으로 정렬을 수행하여야 합니다.

 

<람다식을 통해 2차원 배열의 2번째 요소로 정렬하는 방법>

subtask.sort(key=lambda x:x[1])