프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 6068 시간 관리하기 Python

중규리 2024. 1. 6. 14:53

🐸 문제 정보

 

6068번: 시간 관리하기

성실한 농부 존은 시간을 효율적으로 관리해야 한다는 걸 깨달았다. 그는 N개의 해야할 일에 (1<=N<=1000) 숫자를 매겼다. (우유를 짜고, 마굿간을 치우고, 담장을 고치는 등의) 존의 시간을 효율적

www.acmicpc.net

 

🤖 알고리즘

그리디

정렬

 

⏱️ 풀이 시간

14.23

 

📝 풀이

랜덤 문제인데 연속으로 그리디가 나와서 신기했다.

문제 자체는 어렵지 않았으나, 처음에 하루를 24시간으로 생각하고 기상 시간의 최초 값을 24로 넣는 바보같은 실수를했다...

문제를 풀 때 지문은 그냥 꾸미기 위함일 뿐... 단어에 의미를 부여해서 읽으면 안되는데 진짜 바보같이!

 

여튼 풀이 과정은 아래와 같다.

  1. 마감 시간이 가장 늦고, 가장 오래 걸리는 작업 순으로 정렬
  2. 작업을 순회하면서, 현재까지 기상 시간과 보고 있는 작업의 마감 시간을 비교한다.
    • 만약 마감 시간이 기상 시간보다 크다면, 기상시간 = 기상시간 - 작업 시간
    • 나머지 경우에는 기상시간 = 마감 시간 - 작업 시간
  3. 마지막 기상 시간을 출력한다.
    • 기상 시간이 0보다 작다면, 그날 작업은 불가능한 경우이므로 -1
    • 0보다 크거나 같다면 해당 기상 시간 출력

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

n = int(input())
tasks = sorted([tuple(map(int, input().rstrip().split())) for _ in range(n)], key=lambda x:[-x[1], -x[0]])

wakeup = sys.maxsize
for i in range(n):
    if wakeup < tasks[i][1]:
        wakeup = wakeup - tasks[i][0]
    else:
        wakeup = tasks[i][1] - tasks[i][0]

if wakeup > 0:
    print(wakeup)
else:
    print(-1)