[BOJ][⚪2][백준#03216] 다운로드

작성:    

업데이트:

카테고리:

태그: , , ,

문제 출처

BAEKJOON Online Judge #3216


문제

택희는 인터넷에서 노래를 다운받으려고 한다. 노래는 여러 조각으로 나누어져 있고, 정해진 순서대로 다운받아야 한다. 택희는 각 조각의 노래 길이와 다운로드 길이를 알고 있다. 택희는 노래를 모두 다운받기 전에 들으려고 한다. 음악이 중간에 끊여지면 분위기를 망치기 때문에, 한 번 듣기 시작하면 노래는 멈추지 않고 끝까지 재생해야 한다. 각 조각을 들으려면 그 조각을 모두 다운로드 해야 들을 수 있다. 택희가 음악을 끊김없이 들으려면, 다운로드 시작한지 몇 초 후에 들으면, 끊김 없이 노래를 들을 수 있는지 구하는 프로그램을 작성하시오. 


입력

첫째 줄에 조각의 수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개의 줄에는 노래의 길이 D와 다운로드하는데 걸리는 시간 V가 주어진다. (1 ≤ D,V ≤ 1000)


출력

첫째 줄에, 다운로드 시작하고 몇 초 후에 노래를 듣기 시작하면, 끊김 없이 들을 수 있는지 출력한다. 그러한 시간이 여러개라면, 가장 빠른 것을 출력한다.


예제

예제 1

입력

4
2 1
1 5
3 3
2 4


출력

7


예제 2

입력

5
1 1
1 2
3 1
2 1
3 3


출력

2


예제 3

입력

7
2 1
2 4
1 2
2 1
3 2
3 1
1 3


출력

3


My Sol

import sys
input = sys.stdin.readline

N = int(input())
it, nt, tt = 0, 0, 0
for _ in range(N):
    ml, md = map(int, input().split())
    nt += md
    if nt > tt:
        it += nt-tt
        tt = nt
    tt += ml

print(it)

다운로드 후의 시간과 실행시간에 대해 비교하며 초기값을 추가해가면 쉽게 해결할 수 있는 문제였다.

  1. md는 다운로드 시간, ml은 재생 시간이다.
  2. 일단 현재 입력에 대해 처리한 뒤, 다운로드를 바로 한다고 치면 nt에 md를 더한다.
  3. 만약 이 누적값이 실행시간에 비교한 현재 시간 tt보다 크다면 tt는 초기값을 더 키워서 nt에 다다를 수 있어야 한다. 때문에 초기값을 이 차이만큼 더해준다.
  4. 현재 시간에 재생시간 ml을 추가한다.
  5. it를 출력한다.


결과

맞았습니다!!

댓글남기기