Home BOJ 17521번 Byte Coin 파이썬
Post
Cancel

BOJ 17521번 Byte Coin 파이썬

문제

국제자본부동산회사(ICPC)는 바이트 코인(Byte Coin)에 자금을 투자하고 있다. 바이트 코인은 김박사가 만든 가상 화폐이다. 실제로는 바이트 코인 가격을 예상할 수 없지만 이 문제에서는 바이트 코인 가격 등락을 미리 정확히 예측할 수 있다고 가정하자.

우리는 1일부터 n일까지 n일 동안 그림 1과 같이 바이트 코인의 등락을 미리 알 수 있으며 우리에게는 초기 현금 W가 주어져 있다. 그림 1의 빨간색 네모는 해당 일자의 바이트 코인 가격을 나타낸다. 매일 바이트 코인을 매수하거나 매도할 수 있다고 하자. 다만 바이트 코인 하나를 나누어 매도하거나 매수할 수는 없다. 우리는 n일 날 보유하고 있는 모든 코인을 매도할 때 가지고 있는 현금을 최대화하고 싶다.

그림 1. 10 일간 바이트 코인 가격 등락 그래프

예를 들어, 그림 1과 같은 바이트 코인 등락 그래프를 첫날 미리 알 수 있다고 하고 우리에게 주어진 초기 현금이 24라고 하자. 수익을 최대한 높이려면 다음과 같이 바이트 코인을 매수, 매도할 수 있다. 첫 날 현금 20을 써서 4개의 코인을 산다. 둘째 날 모든 코인을 매도해서 현금 28을 얻고 모두 32의 현금을 갖게 된다. 5일째 되는 날 현금 32를 써서 16개의 코인을 매수한다. 7일째 되는 날 모든 코인을 매도해서 모두 128의 현금을 갖게 된다. 9일째 되는 날 현금 126을 써서 42개의 코인을 사고 10일 날 모든 코인을 매도한다. 그러면 10일 날 현금이 170이 되고 이것이 최대이다.

요일 수 n, 초기 현금 W, 1일부터 n일까지 각 요일의 바이트 코인 가격이 주어질 때, n일 날 보유하고 있는 모든 코인을 매도할 때 보유하게 될 최종 현금의 최댓값을 출력하는 프로그램을 작성하시오.

입력

입력은 표준입력을 사용한다. 첫 번째 줄에 요일 수를 나타내는 양의 정수 n과 초기 현금 W(1 ≤ n ≤ 15, 1 ≤ W ≤ 100,000)가 주어진다. 다음 n 개의 줄에서, i번째 줄은 i일의 바이트 코인 가격을 나타내는 정수 si가 주어진다(1 ≤ si ≤ 50).

출력

출력은 표준출력을 사용한다. n일 날 보유하고 있는 모든 코인을 매도할 때 가지고 있는 현금의 최댓값을 한 행에 출력한다. 비록 초기 현금 W는 그렇게 크지 않지만 최종 현금은 매우 커질 수 있음에 주의하자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
N,W = map(int,input().split())
S = [int(input()) for _ in range(N)]
maxv= max(S)
buy_price = maxv
coin = 0

for i in range(N-1):
    #다음꺼가 더 클 때 지금 가격에 구매
    if S[i+1]>S[i]:
        buy_price = min(buy_price,S[i])
        coin = W // buy_price
        minus =  buy_price * coin
    #다음께 작으면 판매
    elif S[i+1]<S[i] and coin != 0:
    #판매
    #돈 차감
        W += S[i]*coin-minus
        buy_price = maxv
        coin=0

if coin!=0:
    W += S[-1]*coin-minus

print(W)

다음날 가격이 더 비싸면 사고, 싸면 판다.

근데 ‘내일이 오늘보다 더 싸면 오늘 가격에 구매’라는 로직을 세우면 최저가가 아닌 날에도 구매를 하게 되어서 min으로 비교해서 더 낮은 값을 넣어주었다.

접근 방식은 머리에 있는데, 아직 코드로 표현하는 능력이 미숙해서 많은 시간을 소요했다.

그리고 변수명은 뭉뜽그려 생각하고, 바로 코딩에 들어가니까 중간에 생각이 막히게 된다.

더 세세하게 계획을 세우고 코딩을 시작할 필요성이 있을 것 같다.

This post is licensed under CC BY 4.0 by the author.

TIL_Git branch

BOJ 2720번 세탁소 사장 동혁 파이썬