카테고리 없음
[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