Computer Science/알고리즘

[백준 - Python] 6068 - 시간 관리하기

바보1 2023. 4. 4. 16:59

0.  문제 링크

 

 

https://www.acmicpc.net/problem/6068

 

6068번: 시간 관리하기

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

www.acmicpc.net


1.  풀이 방법

 

 

끝내야 하는 시간의 역순으로 정렬함

현재 시간과 끝내야 하는 시간 최소값을 구함  

그렇게해서 최소값에서 필요한 시간을 빼면 현재 시간이 나옴

 

그리고 다음 시간을 뽑음

그리고 또 최솟값을 뽑고, 시간을 뺌

 

이런 식으로 풀었음  

그리디 방식으로 뒤에서 차근차근 넣었다고 생각하면

 

만약 최종적으로 현재 시간이 음수가 나온다면, 이는 필시 겹치는 부분이 있다는 것이므로 -1을 출력함

그게 아니라면 그대로 현재 시간을 출력함


2.  코드

 

 

import sys
input = sys.stdin.readline

if __name__ == "__main__":
    n = int(input())
    maps = [list(map(int, input().split())) for _ in range(n)]
    maps = sorted(maps, key = lambda x : x[1], reverse = True)      # 뒤에서부터 넣어봄

    now = float('inf')
    for t, e in maps:
        now = min(now, e) - t       # 현재 시간과 끝내야 하는 시간에서 최소를 구한 후에 차근차근히 넣어봄
    print(now if now >= 0 else -1)      # 만약 넣지 못하는 상황이 생긴다면 now가 음수가 됨

3.  마무리