카테고리 없음

[C++] 백준 20546번 : 🐜 기적의 매매법 🐜

knhoo 2025. 5. 24. 22:22
728x90

https://www.acmicpc.net/problem/20546

문제 요약


  • 준현이는 한 번 산 주식은 절대 팔지 않는다.
  • 준현이는 주식을 살 수 있으면 무조건 최대한 많이 산다.

 

  • 성민이의 모든 거래는 전량 매수와 전량 매도로 이루어진다.
  • 3일  연속 가격이 전일 대비 상승하는 주식은 전량 매도한다.
  • 3일 연속 가격이 전일 대비 하락하는 주식은 전량 매수한다.

 

  • 1월 14일에 (현금 + 마지막 날의 주가 x 주식 수)를 비교한다.
  • 1월 1일부터 1월 14일까지 준현이와 성민이 중 누가 더 높은 수익률을 낼지 맞혀보자!

 

입력과 출력


 

제출 답안


#include <iostream>
using namespace std;

int price[14];

int p1_money;//준현
int p2_money;//성민

int p1_amount;//준현 주식 수
int p2_amount;//성민 주식 수

int p1_result;
int p2_result;

int up = 0;
int down = 0;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	//현금 입력
	cin >> p1_money;
	p2_money = p1_money;

	//14일간의 주가 입력
	for (int i = 0; i < 14; i++) {
		cin >> price[i];
	}

	//준현
	for (int i = 0; i < 14; i++) {
		if (price[i] <= p1_money) {
			p1_amount += p1_money / price[i];//주식 구매 개수
			p1_money = p1_money - price[i] * (p1_money / price[i]);//남은 현금
		}
	}

	//성민
	for (int i = 1; i < 14; i++) {
		//이전 주가와 비교
		if (price[i] > price[i - 1]) {
			up++;
			down = 0;
		}
		else if (price[i] < price[i - 1]) {
			up = 0;
			down++;
		}
		else {
			up = 0;
			down = 0;
		}

		if (up >= 3) {//3일 연속 상승
			//전량 매도
			p2_money += price[i] * p2_amount;
			p2_amount = 0;
		}
		else if (down >= 3 && price[i] <= p2_money) {//3일 연속 하락
			//전량 매수
			p2_amount += p2_money / price[i];//주식 구매 개수
			p2_money = p2_money - price[i] * (p2_money / price[i]);//남은 현금
		}
	}

	p1_result = p1_money + (price[13] * p1_amount);
	p2_result = p2_money + (price[13] * p2_amount);

	if (p1_result > p2_result) cout << "BNP";
	else if (p1_result < p2_result) cout << "TIMING";
	else cout << "SAMESAME";

	return 0;
}

 

문제점


초반에 예제 입력은 모두 통과했지만

<=를 <로 설정하는 실수와,

3일 연속 상승/하락에 대한 검사 방법에 오류가 있어서 조금 헤맸었다..

728x90