사자자리
[C언어] 백준 17521번: Byte Coin 본문
https://www.acmicpc.net/problem/17521
17521번: Byte Coin
입력은 표준입력을 사용한다. 첫 번째 줄에 요일 수를 나타내는 양의 정수 n과 초기 현금 W(1 ≤ n ≤ 15, 1 ≤ W ≤ 100,000)가 주어진다. 다음 n 개의 줄에서, i번째 줄은 i일의 바이트 코인 가격을 나
www.acmicpc.net
1일 | 매수 | 코인 4개 | 현금 24 - 20 = 4 |
2일 | 매도 | 코인 0개 | 현금 4 + 28 = 32 |
3일 | 매도 | 코인 0개 | |
4일 | 매도 | 코인 0개 | |
5일 | 매수 | 코인 16개 | 현금 32 - 32 = 0 |
6일 | 매수 | 현금 = 0 | |
7일 | 매도 | 코인 0개 | 현금 0 + 128 = 128 |
8일 | 매도 | 코인 0개 | |
9일 | 매수 | 코인 42개 | 현금 128 - 126 = 2 |
10일 | 매도 | 코인 0개 | 현금 2 + 168 = 170 (최대) |
- 극댓값이 아닌 곳에서 매도하려고 하면, 코인이 없다.
- 극솟값이 아닌 곳에서 매수하려고 하면, 현금이 없다.
- 따라서 그냥 오늘이 다음날보다 비쌀 때 매도하고, 오늘이 다음날보다 쌀 때 매수하도록 코드를 짠다.
#include <stdio.h>
int main(){
int n, *price;
long long money, coin = 0;
scanf("%d %lld", &n, &money);
price = malloc(sizeof(int)*n);
for (int i = 0; i < n; i++) scanf("%d", &price[i]);
for (int i = 0; i < n; i++){
//오늘이 다음날보다 비쌀 때, 매도
if (price[i] > price[i+1]){
money += coin * price[i];
coin = 0;
}
//오늘이 다음날보다 쌀 때, 매수
if (price[i] < price[i+1]){
long long temp = money / price[i]; //살 수 있는 코인의 개수
money -= temp * price[i];
coin += temp;
}
}
//마지막 날(n일), 모두 매도
money += coin * price[n-1];
printf("%lld", money);
return 0;
}
'C언어 > C언어 문제' 카테고리의 다른 글
[C언어] 백준 17950번: 스노우볼 (0) | 2022.08.19 |
---|---|
[C언어] 백준 11070번: 피타고라스 기댓값 (0) | 2022.08.17 |
[C언어] 백준 5554번: 심부름 가는 길 (0) | 2022.08.16 |
[C언어] 백준 5354번: J박스 (0) | 2022.08.16 |
[C언어] 백준 2851번: 슈퍼 마리오 (0) | 2022.08.16 |
Comments