Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 책을 다 읽는 데 필요한 일수 계산하기


길이가 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