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