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
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 01025] 제곱수 찾기 [Java] (0) | 2025.03.07 |
---|---|
[백준 01013] Contact [Java] (0) | 2025.03.07 |
[백준 14007] Small Weird Measurements [Java] (0) | 2025.03.07 |
[백준 20410] 추첨상 사수 대작전! (Easy) [Java] (0) | 2025.03.06 |
[백준 15685] 드래곤 커브 [Java] (0) | 2025.03.04 |