패스의 효율을 계산해보자 - C++코드 작성, 크리스탈 나이츠
패스의 효율성을 따져보고자 계산하는 프로그램을 만들었다.
프로그램이라지만 허접하게 수치로써 표현한 점에 대해 어떻게 아래와 같은 방식이 나오게 됬는지 설명하고자 한다.
결론적으로 말을 하자면 수치가 높을수록 효율이 높다는 측에 속한다.
크리스탈 나이츠의 패스는 20개의 보상으로 구성되어져 있다. 무료보상과 유료보상이 존재하는데, 본 프로그램은 유료보상에 대한 계산결과만을 도출해내고 있다. 유료보상에 따른 효율이 얼마나 좋은 지 계산해보는 콘솔프로그램을 만들었다.
일단 크리스탈과 재화가격을 두고 계산을 하게 되었는데, 일단 ! 소모되는 재화의 금액을 100으로 나누어서 단위를 1의 단위가 아닌 100의 단위로 만든 후, 이를 크리스탈 재화를 나누는데 사용하였다. 이렇게 말로만 하자면 복잡해지니 간단하게 아래의 공식으로 나타내었다.
결과수치 = (보상으로 얻을 수 있는 크리스탈 재화) / ( 현질한 금액 / 100 )
패스로 인한 효율성을 따져보았을 때, 기사단패스의 효율이 가장 컸고, 그 다음으로는 출석패스의효율이 컸다. 몬스터패스와 필드패스의 경우에는 필드나 몬스터를 잡음으로써 얻을 수 있는 보상인데, 언뜻 보기엔 괜찮게 보여도 어느 정도의 목표만 달성하면 돈을 투자해달라는 이야기와 같아보인다. 유저보다는 회사가 더 이득을 보는 구조라고 생각한다.
유저가 이득을 보기 위해서는 기사단패스나 출석패스를 지르는 것을 프로그램코드에 의해 추천한다.
추가적으로 어떠한 콘텐츠를 먼저 질러야 하는지, 효율성을 따지기 위해서 수기로 직접 나열하고자 하였지만, 아무래도 수고가 많을 것으로 생각이 되어서 콘솔프로그램에 추가적으로 내림차순 수치를 적어보았다. 만약에 패스를 구매하려는 사람이 있다면 참조하면 좋을 것으로 생각되어진다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
몬스터패스의 효율
1단계 : 757
2단계 : 727
3단계 : 404
4단계 : 404
5단계 : 404
6단계 : 404
필드패스의 효율
1단계 : 757
2단계 : 727
3단계 : 424
4단계 : 554
5단계 : 554
기사단패스의 효율
1단계 : 818
2단계 : 909
3단계 : 1111
4단계 : 1111
출석패스 효율
1단계 : 787
2단계 : 909
3단계 : 1111
상점::픽업상점 효율
1단계 : 372
2단계 : 347
3단계 : 347
결론 : 픽업상점의 효율이 가장 나쁘다 !
효율수치가 가장 높은 것부터 나열해보았다.
1111 1111 1111 909 909
818 787 757 757 727
727 554 554 424 404
404 404 404 372 347
347
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
#include <iostream>
#include <vector>
#include <algorithm>
class pass
{
public:
pass() {};
~pass() {};
public:
int printpass(int cristal, int money) {
int temp = money / 100; // 100원 단위로 만들어봄.
std::cout << cristal / temp << "\n"; // 100원당 효율가격 출력.
return cristal / temp;
};
private:
};
int main()
{
std::vector<int> v;
// 몬스터패스
{
std::cout << "몬스터패스의 효율\n";
int cristal[6] = { 1250 * 20, 2000 * 20, 2000 * 20, 2000 * 20, 2000 * 20, 2000 * 20};
int money[6] = { 3300, 5500, 9900, 9900, 9900, 9900};
pass p;
for (size_t i = 0; i < 6; i++)
{
std::cout << i + 1 << "단계 : ";
v.push_back(p.printpass(cristal[i], money[i]));
}
std::cout << "\n";
}
// 필드패스
{
std::cout << "필드패스의 효율\n";
int cristal[5] = { 1250 * 20, 2000 * 20, 2100 * 20, 3050 * 20, 3050 * 20 };
int money[5] = { 3300, 5500, 9900, 11000, 11000 };
pass p;
for (size_t i = 0; i < 5; i++)
{
std::cout << i + 1 << "단계 : ";
v.push_back(p.printpass(cristal[i], money[i]));
}
std::cout << "\n";
// 현재 뚫려있는 필드패스는 5단계까지 있음 !
// 757, 727, 424, 554, 554 가 출력됨으로써
// 가장 낮은 패스인 1,2를 지르는 게 바람직.
}
// 기사단패스
{
std::cout << "기사단패스의 효율\n";
int cristal[5] = { 1350 * 20, 2500 * 20, 5500 * 20, 5500 * 20 ,0 };
int money[5] = { 3300, 5500, 9900, 9900, 0 };
pass p;
for (size_t i = 0; i < 4; i++)
{
std::cout << i + 1 << "단계 : ";
v.push_back(p.printpass(cristal[i], money[i]));
}
std::cout << "\n";
// 현재 뚫려있는 필드패스는 5단계까지 있음 !
// 818, 989, 1111, 1111 출력
}
// 출석패스
{
std::cout << "출석패스 효율\n";
int cristal[5] = { 1300 * 20, 2500 * 20, 5500 * 20, 0, 0 };
int money[5] = { 3300, 5500, 9900, 0, 0 };
pass p;
for (size_t i = 0; i < 3; i++)
{
std::cout << i + 1 << "단계 : ";
v.push_back(p.printpass(cristal[i], money[i]));
}
std::cout << "\n";
// 현재 뚫려있는 필드패스는 5단계까지 있음 !
// 818, 989, 1111, 1111 출력
}
// 상점::픽업상점 효율성 체크
{
std::cout << "상점::픽업상점 효율\n";
int cristal[5] = { 90000 + 33000, 136350 + 55000, 272727 + 110000, 0, 0 };
int money[5] = { 33000, 55000, 110000, 0, 0 };
pass p;
for (size_t i = 0; i < 3; i++)
{
std::cout << i + 1 << "단계 : ";
v.push_back(p.printpass(cristal[i], money[i]));
}
std::cout << "\n";
// 372, 347, 347 출력.
}
std::cout << "결론 : 픽업상점의 효율이 가장 나쁘다 ! \n";
std::cout << "효율수치가 가장 높은 것부터 나열해보았다. \n";
// 넣은 데이터를 정렬 !
std::sort(v.begin(), v.end(), std::greater<>());
for (size_t i = 0; i < v.size(); i++)
{
if (i % 5 == 0 && i != 0) std::cout << "\n";
std::cout << v[i] << " ";
}
}