Koder / 박성훈
article thumbnail

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

 

20546번: 🐜 기적의 매매법 🐜

1월 14일 기준 준현이의 자산이 더 크다면 "BNP"를, 성민이의 자산이 더 크다면 "TIMING"을 출력한다. 둘의 자산이 같다면 "SAMESAME"을 출력한다. 모든 결과 따옴표를 제외하고 출력한다.

www.acmicpc.net

 

주식을 구매하는 두가지 방법론을 구현하는 문제.

준현이는 살수 있는 모든 경우에 대해서 사게 하고,

성민이는 3일 연속 상승인 경우 매도,

3일 연속 하락인 경우 매수하게끔 소스코드를 작성해주면 된다.

 

3일 연속 상승은

$p_{k-3} < p_{k-2}$, 

$p_{k-2} < p_{k-1}$,

$p_{k-1} < p_{k}$

세 조건을 모두 달성한 경우로 한다.

 

$p_{k-2} < p_{k-1}$,

$p_{k-1} < p_{k}$

이 아님에 유의해야 한다.

 

#include <bits/stdc++.h>
using namespace std;

int arr[20] = {0};

int N;

int JH(){
	int cash = N;
	int stock = 0;
	
	for(int i=0; i<14; i++){
		stock += cash/arr[i];
		cash %= arr[i];
	}
	
	return cash + stock * arr[13];
}

int SM(){
	int cash = N;
	int stock = 0;
	
	for(int i=3; i<14; i++){
		if(
			arr[i-3] < arr[i-2] &&
			arr[i-2] < arr[i-1] &&
			arr[i-1] < arr[i]
		){
			cash += stock * arr[i];
		}
		
		if(
			arr[i-3] > arr[i-2] &&
			arr[i-2] > arr[i-1] &&
			arr[i-1] > arr[i]
		){
			stock += cash/arr[i];
			cash %= arr[i];
		}
	}
	return cash + stock * arr[13];
}

int main(){
	cin >> N;
	for(int i=0; i<14; i++) cin >> arr[i];
	
	int jh = JH();
	int sm = SM();
	
	if(jh > sm) 	 cout << "BNP";
	else if(jh < sm) cout << "TIMING";
	else 			 cout << "SAMESAME";
	return 0;
}

반응형