출처 : HackerRank - Halloween Sale
문제
요약
나는 s 라는 금액을 가지고 있습니다. 상품의 가격이 주어질 때, 나는 최대 몇개의 상품을 살 수 있을까요?
상품의 가격은 다음과 같은 규칙을 갖고 있습니다.
매달 1개의 상품이 상점에 입고됩니다. 최초에 상품의 가격은 p 입니다. 매달 d 씩 가격이 떨어집니다. 단, m 미만으로는 가격이 떨어지지 않습니다.
예를 들어,
p=20
, d=3
, m=6
로 주어졌다면 매달입고되는 상품의 가격은 다음과 같이 변합니다.
20, 17, 14, 11, 8, 6, 6, 6, 6, 6, 6 ...
첫 달은 20 이었으며 매달 3씩 줄어들지만 최소한 6의 가격 밑으로 떨어지지 않습니다.
입력형식
p
, d
, m
, s
를 한줄에 공백(space)로 나누어 제공합니다.
제약사항
1 ≤ m ≤ p ≤100
1 ≤ d ≤ 100
1 ≤ s ≤ 10^4
출력형식
몇 개의 상품을 살 수 있는지 숫자로 화면에 출력합니다.
풀이
내가 가진 금액으로 물건을 살 수 있는지/없는지 판단을 해야 합니다.
없다면 현재까지 구매한 물건의 갯수를 돌려줍니다.
있다면,
가진돈에서 구매한 가격만큼 제거합니다.
구매한 물건의 갯수를 증가시킵니다.
다음달의 물건의 가격을 계산합니다.
작성한 부분은 howManyGames 함수 부분입니다.
프로그램
#include <bits/stdc++.h>
using namespace std;
vector<string> split_string(string);
// Complete the howManyGames function below.
int howManyGames(int p, int d, int m, int s) {
// Return the number of games you can buy
int n = 0;
while (s>=p) {
s -= p;
p -= d;
if (p<m) {
p = m;
}
n++;
}
return n;
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
string pdms_temp;
getline(cin, pdms_temp);
vector<string> pdms = split_string(pdms_temp);
int p = stoi(pdms[0]);
int d = stoi(pdms[1]);
int m = stoi(pdms[2]);
int s = stoi(pdms[3]);
int answer = howManyGames(p, d, m, s);
fout << answer << "\n";
fout.close();
return 0;
}
vector<string> split_string(string input_string) {
string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) {
return x == y and x == ' ';
});
input_string.erase(new_end, input_string.end());
while (input_string[input_string.length() - 1] == ' ') {
input_string.pop_back();
}
vector<string> splits;
char delimiter = ' ';
size_t i = 0;
size_t pos = input_string.find(delimiter);
while (pos != string::npos) {
splits.push_back(input_string.substr(i, pos - i));
i = pos + 1;
pos = input_string.find(delimiter, i);
}
splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1));
return splits;
}
'알고리즘 트레이닝 > Hackers Rank' 카테고리의 다른 글
Strong Password (0) | 2019.10.09 |
---|---|
Maximum Element (0) | 2019.10.09 |
HackerRank - The Bomberman Game (0) | 2018.06.16 |
HackerRank - 3D Surface Area (0) | 2018.06.12 |