0. 문제 링크
https://www.acmicpc.net/problem/6068
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. 마무리
'Computer Science > 알고리즘' 카테고리의 다른 글
[백준 - Python] 14950 - 정복자 (1) | 2023.04.12 |
---|---|
[백준 - Python] 12757 - 전설의 JBNU (0) | 2023.04.04 |
[백준 - Python] 12764 - 싸지방에 간 준하 (0) | 2023.04.04 |
[백준 - Python] 20440 - 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 (0) | 2023.03.27 |
[백준 - Python] 17404 - RGB 거리 2 (0) | 2023.03.27 |