[백준 17496] 스타후르츠 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
여름이 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;
}