길이가 n인 배열 A와 정수 t가 주어져 있다고 가정해 보겠습니다. Amal은 i번째 날에 업무로 A[i]초를 소비하고, 남은 여가 시간에 책을 읽습니다. 책 전체를 읽는 데는 총 t초가 필요하며, 우리가 구해야 할 것은 책을 끝까지 읽기 위해 며칠이 걸리는지입니다.
예를 들어 입력이 A = [86400, 86398], t = 2라면 출력은 2가 됩니다. 하루는 86400초인데 첫째 날은 업무 시간으로 가득 차 있어 독서할 시간이 전혀 없습니다. 반면 둘째 날에는 2초의 여유가 생기므로 그날 책을 마칠 수 있기 때문입니다.
문제 해결 절차
이 문제는 아래 단계를 따라 해결할 수 있습니다.
- 일수를 세는 변수 cnt를 1로 초기화합니다.
- 배열 A의 크기를 n에 저장합니다.
- 각 날짜마다 여가 시간(86400 − A[i]초)을 계산해 t에서 차감합니다.
- t가 0 이하가 되면 지금까지 센 일수 cnt를 반환합니다.
- 아직 다 읽지 못했다면 cnt를 1 늘리고 다음 날로 진행합니다.
cnt := 1
n := size of A
for initialize i := 0, when i < n, update (increase i by 1), do:
x := A[i]
t := t - (86400 - x)
if t <= 0, then:
return cnt
(increase cnt by 1)
구현 예제
다음 C++ 구현 예시를 통해 더 자세히 이해해 보겠습니다.
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int t){
int cnt = 1;
int n = A.size();
for (int i = 0; i < n; i++){
int x = A[i];
t -= 86400 - x;
if (t <= 0){
return cnt;
}
++cnt;
}
}
int main(){
vector<int> A = { 86400, 86398 };
int t = 2;
cout << solve(A, t) << endl;
}
입력
{ 86400, 86398 }, 2
출력
2