[백준(BOJ)] Byte Coin(17521번)_C++
2023. 9. 26. 13:48ㆍProblem Solving/Greedy & 구현
728x90
반응형
SMALL
모두가 주식할 때 행복회로를 그리듯 저점에 사고, 고점에 팔면 최대 이득을 얻을 수 있다.
그것을 그대로 구현해내면 된다.
함정이 있다면 최종 금액이 int의 범위를 넘을 수 있다는 점이다.
예로 초기 현금이 10만원이고, 15일간 코인의 가격이 1원과 50원만을 왔다갔다 한다면 100,000 * 50^7에 달하는 최종 금액을 얻을 수 있다.
이는 78,125,000,000,000,000원으로 어마무시한 금액이다.
저 금액의 0.00001% 라도 갖고 싶다.
정답 코드
#include <iostream>
using namespace std;
int n, s[15];
long long W;
int main(){
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
//input
cin >> n >> W;
for (int i = 0; i < n; i++)
cin >> s[i];
//simulation
long long coin = 0;
for (int i = 0; i < n; i++){
if (i == n - 1){ //last day
W += coin * s[i];
continue;
}
if (s[i] < s[i + 1]){
long long buy = W / s[i];
coin += buy;
W -= buy * s[i];
}
else if (s[i] > s[i + 1]){
W += coin * s[i];
coin = 0;
}
}
//output
cout << W;
}728x90
반응형
LIST
'Problem Solving > Greedy & 구현' 카테고리의 다른 글
| [백준(BOJ)] 비밀번호 발음하기(4659번)_C++ (0) | 2024.03.16 |
|---|---|
| [백준(BOJ)] 줄세우기(10431번)_C++ (0) | 2024.03.15 |
| [백준(BOJ)] 트럭(13335번)_C++ (0) | 2023.09.20 |
| [백준(BOJ)] 명령 프롬프트(1032번)_C++ (0) | 2023.04.16 |
| [백준(BOJ)] 박스(9455번)_C++ (0) | 2023.04.15 |