#include <iostream>
using namespace std;
/* <문제해결>
[준현이의 매매법]
규칙1. 주식을 살수있을 때 무조건 산다.
규칙2. 한번산 주식은 절대로 팔지 않는다.
규칙3. 마지막날(1월14일)에 전량 매도한다.
[성민이의 매매법]
규칙1. 모든 거래는 전량매수/매도로 이루어진다.
규칙2. 주가가 3일이상 연속해서 떨어지면 남은돈을털어 무조건 전량매수한다
규칙3. 주가가 3일이상 연속해서 올라가면 가지고있는 주식을 전량매도한다.
우선, 준현이의 매매방법은 간단하다.
주식을 살 수 있을때 살 수 있는만큼 사서 마지막날에 전부 팔면 최종자산이된다.
문제는 성민이의 매매방법이다.
성민이는 주가가 3일연속 떨어지면 매수하고, 매수한 다음에는 매도할 타이밍을 재야한다. 따라서 매수 후 매도이다.
또한 매수또는 매도를 못할수도 있다.
먼저, 매수를 진행한다. 매수를 성공하면 매수한 날짜를 기억한다.
그리고 매도를 진행한다. 매도를 성공했는지 확인하기위해 didSell 이라는 bool 변수를두었다.
만약, 매도를 하지못했을때는 마지막날에 전량매도하도록했다.
*/
int stock[15]; // .. 주가
// 준현이의 매매방법
int BNP(int money)
{
int change = money; // .. 남은자산
int stocks = 0; // .. 보유주식
for (int i = 1;i <= 13;i++)
{
// 남은돈으로 주식을 살 수 있을 때
if (change >= stock[i])
{
stocks = stocks + (change / stock[i]);
change = change % stock[i];
}
}
return (change + stocks * stock[14]); // .. 14일에 풀매도한 자산
}
int TIMING(int money)
{
int change = money; // .. 남은자산
int stocks = 0; // .. 보유주식
int count = 0; // .. 연속주가하락
int buyIndex = 0;
// 매수
for (int i = 2;i <= 13;i++)
{
// 주가가 하락했을 때
if (stock[i] < stock[i - 1]) count++;
// 주가가 하락하지 않으면 초기화
else count = 0;
// 3일연속 이상 주가가 하락했을 때 매수
if (count >= 3)
{
if (change >= stock[i])
{
stocks = stocks + (change / stock[i]);
change = change % stock[i];
buyIndex = i; // .. 매수날짜 기억
}
}
}
count = 0;
bool didSell = false; // .. 매도했는지 여부
// 매수한 다음부터 매도가능
for (int i = buyIndex + 1;i <= 14;i++)
{
if (stock[i] > stock[i - 1]) count++;
else count = 0;
// 3일연속 이상 주가가 상승했을 때 매도
if (count >= 3)
{
change = change + (stocks * stock[i]);
stocks = 0;
didSell = true;
break;
}
}
// 매도를 못했을 경우
if (!didSell) change = change + stocks * stock[14];
return change;
}
int main()
{
int m;
cin >> m;
for (int i = 1; i <= 14;i++)
{
cin >> stock[i];
}
if (BNP(m) > TIMING(m)) cout << "BNP";
else if (BNP(m) == TIMING(m)) cout << "SAMESAME";
else cout << "TIMING";
}
댓글남기기