알고리즘/백준

3216번 : 다운로드

코딍코딍 2023. 7. 30. 18:18

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

 

3216번: 다운로드

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

www.acmicpc.net

 

 

문제

택희는 인터넷에서 노래를 다운받으려고 한다. 노래는 여러 조각으로 나누어져 있고, 정해진 순서대로 다운받아야 한다. 택희는 각 조각의 노래 길이와 다운로드 길이를 알고 있다.

택희는 노래를 모두 다운받기 전에 들으려고 한다. 음악이 중간에 끊여지면 분위기를 망치기 때문에, 한 번 듣기 시작하면 노래는 멈추지 않고 끝까지 재생해야 한다. 각 조각을 들으려면 그 조각을 모두 다운로드해야 들을 수 있다.

택희가 음악을 끊김없이 들으려면, 다운로드 시작한 지 몇 초 후에 들으면, 끊김 없이 노래를 들을 수 있는지 구하는 프로그램을 작성하시오. 

 

 

입력

첫째 줄에 조각의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

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

 

 

출력

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

 

 

해결방법

"모든 노래를 한 번에 끊기지 않고 들어야 한다. 그러려면 다운로드를 시작하고 몇 초후에 노래를 들어야 하는가"가 이 문제이다. 처음에 문제 이해가 잘 안 돼서 한 줄로 써보았다. 

 

1. 노래를 듣기 위해선 다운로드가 필요하다.

2. 다운로드를 위한 시간이 필요하다.

3. 다운로드를 위한 시간은 이전 노래의 다운로드 시간보다 노래시간이 길거나 처음에 시작을 늦춘 경우 얻을 수 있다.

 

(이전 노래의 시간 - 이전 노래의 다운로드 시간)이 현재 노래의 다운로드 시간보다 커야한다. 그래야 문제의 조건을 만족한다.

(이전 노래의 시간 - 이전 노래의 다운로드 시간) >= 현재 노래의 다운로드 시간

 

아래 입력의 경우

2
2 1
1 5

2 - 1 >= 5
1 >= 5 => 5 - 1 = 4

문제를 만족하려면 다운로드를 시작하고 4초 뒤에 노래를 들어야 한다.

 

예제 1의 경우

4
2 1
1 5
3 3
2 4

1 >= 5                      => 4
1 + (-4) >=   3         => 6
1 + (-4) + 0 >= 4    => 7

문제를 만족하려면 다운로드를 시작하고 7초 뒤에 노래를 들어야 한다.

 

예제 2의 경우

5
1 1
1 2
3 1
2 1
3 3

0 >= 2                         => 2
0 + (-1) >= 1               => 2
0 + (-1) + 2 >= 1        => 0
0 + (-1) + 2 + 1 >= 3  => 1

 

문제를 만족하려면 다운로드를 시작하고 2초 뒤에 노래를 들어야 한다.