728x90
반응형
https://www.acmicpc.net/problem/1263
문제
진영이는 캠프 조교를 온 후 효율적으로 시간 관리를 해야 한다는 것을 깨달았다. 진영이는 하루에 해야 할 일이 총 N개가 있고 이 일들을 편하게 1번부터 N번까지 차례대로 번호를 붙였다.
진영이는 시간을 효율적으로 관리하기 위해, 할 일들에 대해 끝내야할 시간과 걸리는 시간을 적은 명단을 만들었다. 즉, 이 명단은 i번째 일은 일을 처리하는데 정확히 Ti 시간이 걸리고 Si 시 내에 이 일을 처리하여야 한다는 것을 담고 있다. 진영이는 0시부터 활동을 시작할 수 있고, 두 개 이상의 일을 같은 시간에 처리할 수 없다.
진영이가 바라는 점은 최대한 늦잠을 자는 것이다. 문제는 이러한 진영이를 도와 일들은 모두 마감시간 내에 처리할 수 있는 범위 내에서 최대한 늦게 일을 시작할 수 있는 시간이 몇 시인지 알아내는 것이다.
입력
첫째 줄에 일의 수 N이 입력되고 다음 N개의 줄에 대해 i+1번째 줄에는 i번째 일에 대한 Ti와 Si가 입력된다.
출력
진영이가 일을 모두 끝마칠 수 있는 가장 늦은 시간을 출력한다. 만약 0시부터 시작하여도 일을 끝마칠 수 없다면 -1을 출력한다.
풀이
Code
import sys
input = sys.stdin.readline
n = int(input())
works = [list(map(int, input().split())) for _ in range(n)]
# 1. 끝나는 시간이 가장 늦은 일 순으로 정렬
works.sort(key = lambda x : [-x[1], -x[0]])
# 2. 출력 변수 정의
ans = works[0][1] - works[0][0]
# 3.
for t, s in works[1:] :
# 3-1. 일 시작 가능 시간이 해당 작업 마감 시간보다 클 경우
if ans > s : ans = s - t
# 3-2. 그 외의 경우
else : ans -= t
# 4. 결과 출력
print(ans if ans >= 0 else -1)
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 2293. 동전 1 (0) | 2024.05.30 |
---|---|
[Python/BOJ] 1374. 강의실 (0) | 2024.05.30 |
[Python/BOJ]1240. 노드사이의 거리 (0) | 2024.05.27 |
[Python/BOJ] 1038. 감소하는 수 (0) | 2024.05.27 |
[Python/BOJ] 1011. Fly me to the Alpha Centauri (0) | 2024.02.16 |