백준 온라인 저지, 그리디 / 6068번: 시간관리하기 (파이썬 / 백준 골드문제)
2021. 11. 18. 23:57ㆍ알고리즘/그리디
728x90
반응형
문제
성실한 농부 존은 시간을 효율적으로 관리해야 한다는 걸 깨달았다. 그는 N개의 해야할 일에 (1<=N<=1000) 숫자를 매겼다. (우유를 짜고, 마굿간을 치우고, 담장을 고치는 등의)
존의 시간을 효율적으로 관리하기 위해, 그는 끝내야만 하는 일 목록을 만들었다. 완성될 때 필요한 시간을 T_i(1<=T_i<=1,000) 라고 하며, 끝내야하는 시간을 S_i(1<=S_i<=1,000,000) 이라 한다. 농부 존은 하루의 시작을 t = 0으로 정했다. 그리고 일 할 때는 그 일을 마칠 때 까지 그 일만 한다.
존은 늦잠 자는 걸 좋아한다. 따라서 제 시간에 끝낼 수 있게 결정할 수 있는 한도에서 존이 가장 늦게 일어나도 되는 시간을 출력하라.
입력
첫 줄에는 일의 개수인 N을 받고
두 번째 줄부터 N+1줄까지 T_i와 S_i를 입력받는다.
출력
존이 일을 할 수 있는 마지막 시간을 출력 하라. 존이 제시간에 일을 끝낼 수 없다면 -1 을 출력하라.
예제 입력 1
4 3 5 8 14 5 20 1 16
예제 출력 1
2
접근 방법
- 주어진 일을 끝내야하는 시간을 기준으로 내림차순 정렬한다.
- 이후 일을 하나씩 탐색해나가며 여유 시간을 갱신해나간다.
- 여유 시간은 다음과 같이 갱신한다.
- min(현재까지의 여유시간, 끝내야하는 마감시간) - 현재 탐색 중인 일을 하는데 필요한 시간
코드
# https://www.acmicpc.net/problem/6068
# 접근 방법
# 주어진 일을 끝내야하는 시간을 기준으로 내림차순 정렬한다.
# 이후 일을 하나씩 탐색해나가며 여유 시간을 갱신해나간다.
# 여유 시간은 다음과 같이 갱신한다.
# min(현재까지의 여유시간, 끝내야하는 마감시간) - 현재 탐색 중인 일을 하는데 필요한 시간
n = int(input())
work = [list(map(int, input().split())) for _ in range(n)]
work.sort(key=lambda x:x[1], reverse = True)
spare_time = work[0][1]
for x in work:
spare_time = min(x[1], spare_time) - x[0]
if spare_time >= 0:
print(spare_time)
else:
print(-1)
728x90
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
백준 온라인 저지, 그리디 / 2878번: 캔디캔디 (파이썬 / 백준 골드문제) (0) | 2021.11.19 |
---|---|
백준 온라인 저지, 그리디 / 13458번: 시험감독 (파이썬) (0) | 2021.11.18 |
백준 온라인 저지, 그리디 / 1826번: 연료채우기 (파이썬 / 백준 골드문제) (0) | 2021.11.16 |
백준 온라인 저지, 그리디 / 15922번: 아우으우아으이야 (파이썬 / 백준 골드문제) (0) | 2021.11.12 |
백준 온라인 저지, 그리디 / 2812번: 크게만들기 (파이썬 / 백준 골드문제) (0) | 2021.11.12 |