알고리즘💻/그리디

BOJ 13904번: 과제

호프 2021. 1. 16. 01:10

www.acmicpc.net/problem/13904

 

13904번: 과제

예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다.

www.acmicpc.net

아이디어:

어려워서 구글링함.

1. 일단 점수가 높은 순으로 정렬을 한다.

2. 과제 마감일에 가장 가깝게 배치한다. 그니까 최대한 늦게 과제를 제출한다.

    - 마감일에 이미 원소가 배치되어 있다면 인덱스 하나씩 감소시키면서 배치, 배치할  곳이 없다면 넘어가기

 

생각해볼 점:

로직을 직접 생각해야 되는데 구글링 해버렸당..

과제 마감일에 가깝게 새로운 배열을 만들어서 원소를 넣는 방법이 있다는  걸 생각 못했음.

 

코드:

이차원 배열 정렬하는 방법 list.sort(key = lambda x: x[1])

import sys
n = int(sys.stdin.readline())
arr = []
for _ in range(n):
    arr.append(list(map(int, sys.stdin.readline().split())))

arr.sort(key=lambda x:-x[1]) #점수 큰 순서대로 정렬
ans = [0]*1001

for i in range(n):
    index = arr[i][0]
    while (ans[index]!=0):
        index-=1
        if (index==0):
            break
    if (index==0):
        continue
    ans[index] = arr[i][1]

score = 0
for i in ans:
    score+=i
print(score)