작성일 :

문제 링크

17496번 - 스타후르츠

설명

여름이 N일 동안 지속됩니다. 스타후르츠를 심으면 T일 후에 수확할 수 있으며, 수확한 당일에 다시 심을 수 있습니다.

밭에는 총 C개의 칸이 있고, 각 칸마다 스타후르츠를 하나씩 심을 수 있습니다.

스타후르츠 한 개의 가격이 P원일 때, 여름 동안 벌 수 있는 최대 수익을 구해야 합니다.


접근법

1일차에 심으면 1 + T일차에 첫 수확을 할 수 있습니다.

수확한 당일에 다시 심을 수 있으므로, 1 + T일차에 수확 후 바로 심으면 1 + 2T일차에 두 번째 수확을, 1 + 3T일차에 세 번째 수확을 할 수 있습니다.

따라서, 수확 시점은 1 + T, 1 + 2T, 1 + 3T, ... 형태가 됩니다.

여름이 N일까지이므로, 마지막 수확은 N일 이전이어야 합니다. 따라서 1 + kT ≤ N을 만족하는 최대 정수 k를 구하면 되고, 이를 정리하면 k ≤ (N - 1) / T가 됩니다.

따라서 수확 횟수는 ⌊(N - 1) / T⌋번입니다.

한 번 수확할 때마다 C개의 칸에서 각각 하나씩 총 C개를 수확하고, 각 개당 P원이므로, 총 수익은 ⌊(N - 1) / T⌋ × C × P입니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;

namespace Solution {
  class Program {
    static void Main(string[] args) {
      var tokens = Console.ReadLine()!.Split();
      var N = long.Parse(tokens[0]);
      var T = long.Parse(tokens[1]);
      var C = long.Parse(tokens[2]);
      var P = long.Parse(tokens[3]);

      var harvests = (N - 1) / T;

      Console.WriteLine(harvests * C * P);
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  ll N, T, C, P; cin >> N >> T >> C >> P;

  ll harvests = (N - 1) / T;

  cout << harvests * C * P << "\n";

  return 0;
}