[BOJ][⚪2][백준#03216] 다운로드
작성:    
업데이트:
카테고리: BOJ Silver II
태그: BOJ, BOJ Silver, PS, Python
문제 출처
문제
택희는 인터넷에서 노래를 다운받으려고 한다. 노래는 여러 조각으로 나누어져 있고, 정해진 순서대로 다운받아야 한다. 택희는 각 조각의 노래 길이와 다운로드 길이를 알고 있다. 택희는 노래를 모두 다운받기 전에 들으려고 한다. 음악이 중간에 끊여지면 분위기를 망치기 때문에, 한 번 듣기 시작하면 노래는 멈추지 않고 끝까지 재생해야 한다. 각 조각을 들으려면 그 조각을 모두 다운로드 해야 들을 수 있다. 택희가 음악을 끊김없이 들으려면, 다운로드 시작한지 몇 초 후에 들으면, 끊김 없이 노래를 들을 수 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 조각의 수 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)
다운로드 후의 시간과 실행시간에 대해 비교하며 초기값을 추가해가면 쉽게 해결할 수 있는 문제였다.
- md는 다운로드 시간, ml은 재생 시간이다.
- 일단 현재 입력에 대해 처리한 뒤, 다운로드를 바로 한다고 치면 nt에 md를 더한다.
- 만약 이 누적값이 실행시간에 비교한 현재 시간 tt보다 크다면 tt는 초기값을 더 키워서 nt에 다다를 수 있어야 한다. 때문에 초기값을 이 차이만큼 더해준다.
- 현재 시간에 재생시간 ml을 추가한다.
- it를 출력한다.
결과
맞았습니다!!
댓글남기기