"꾸준하고 완벽한 한 걸음"

PS/Baekjoon Online Judge

[백준 17521] Byte Coin [Java]

kimyoungrok 2025. 3. 7. 00:31
728x90

문제

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

 


풀이

가격이 낮을 때 사고 높을 때 팔아서 마지막에 얻는 최종 현금의 최댓값을 계산하는 문제다.

사고 파는 과정에서 최종 현금은 매우 커질 수 있다. long으로 계산해야 한다.

항상 구매 또는 판매 가능한 최대 수량의 코인을 거래하는 것이 좋다.

현금이 항상 나누어 떨어지지 않으니 나머지가 있음에 유의하자.

        // Solve
        long coin = 0;
        for (int i = 1; i < N; ++i) {
            if (coin == 0 && A[i] > A[i - 1]) {
                coin = W / A[i - 1];
                W %= A[i - 1];
            } else if (coin > 0 && A[i] < A[i - 1]) {
                W += coin * A[i - 1];
                coin = 0;
            }
        }

마지막에 코인을 구매한 상태에서 탐색이 끝날 수 있다.

팔리지 않았다는 것은 가격 변동이 없다는 의미이므로 남은 코인을 전부 마지막 가격 A[i - 1] 으로 판매해서 최종 현금을 계산하자.

        // Output
        System.out.println(W + coin * A[N - 1]);
    }
}

소스코드

https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/17521.java

728x90