반응형
문제
https://www.acmicpc.net/problem/18234
문제 설명
- N 종류의 당근을 T일 동안 재배할 예정이다.
- 각 당근은 w의 맛이 있고 p만큼 맛을 증가시켜주는 영양제가 당근 종류별로 T개씩 준비되어 있다.
- 영양제의 맛은 무조건 w보다 더 높다.
- 각 당근이 해당 위치에 심어져 있다면 영양제를 주고 없다면 당근을 심는다.
- 토끼는 하루마다 당근을 훔쳐 먹는다.
- 이 때 당근의 맛의 합을 최대로 하려고 한다. 최댓값을 구해라
풀이
이 문제의 핵심은 영양제에 있다.
영양제는 무조건 기존 당근의 맛보다 크니까 영양제를 넣고 당글을 먹는 것이 무조건 좋다.
즉, 영양제의 맛이 가장 높은 순, 기본 당근의 맛이 높은 순으로 정렬한 후 가장 많이 영양제를 먹은 순으로 그리디하게 당근을 먹게 했다.
- 영양제, 당근의 맛 순서로 내림차순 정렬한다.
- 가장 가치가 높은 당근부터 순서대로 당근을 먹는다.
- 결과를 출력한다.
코드
import sys
input = sys.stdin.readline
n,t = map(int,input().split())
c = [list(map(int,input().split())) for _ in range(n)]
c.sort(key = lambda x :(-x[1], -x[0]))
res = 0
for i in range(n):
res += (c[i][0] + c[i][1]*(t-i-1))
print(res)
시간복잡도
- 정렬의 연산횟수는 $NlogN$
- N번만큼 당근을 먹으므로 $NlogN + N$
- 즉 시간복잡도는 약 $O(10**6)$이다.
반응형
'알고리즘' 카테고리의 다른 글
| [파이썬/python] 백준 - 11564 점프왕 최준민 (0) | 2025.08.11 |
|---|---|
| [파이썬/python] 백준 - 16940 BFS 스페셜 저지 (2) | 2025.08.08 |
| [파이썬/python] 백준 - 2597 줄자접기 (0) | 2025.08.06 |
| [파이썬/python] 백준 - 1253 좋다 (2) | 2025.08.05 |
| [파이썬/python] 백준 - 1235 학생 번호 (1) | 2025.08.04 |