2 분 소요

Intro

image

image

image

문제해결 및 소스코드

#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";
	
}

댓글남기기