[백준(BOJ)] Byte Coin(17521번)_C++

2023. 9. 26. 13:48Problem 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