https://www.acmicpc.net/problem/17521
(처음 풀이)
매수 시점과 매도 시점을 먼저 파악하자 - !
매수는 가장 쌀 때, 매도는 가장 비쌀때!
매수는 하락 곡선 -> day -> 상승곡선 , day 시점에!
매도는 상승 곡선 -> day -> 하락 곡선, day 시점에!
(풀이)
첫 날엔 무조건 매수
마지막 날엔 무조건 매도
button으로 지나온 구간이 상승 구간이었는지, 하락 구간이었는지 판단하기
n, w = map(int, input().split())
array = [0 for _ in range(n)]
for i in range(n):
array[i] = int(input())
'''
매도 : 가격이 가장 비쌀 때
매수 : 가격이 가장 쌀 때
'''
coin = 0 # 현재 코인 개수
cash = 0 # 현재 현금 금액
button = True # True : up, False : down
for day, price in enumerate(array):
if day == 0:
coin += w // price
cash += w % price
if day == n - 1: # 모든 코인 매수
cash += coin * price
print(cash)
exit(0)
if array[day] <= array[day + 1]: # 매수 매도 x, 위로 올라가는 과정, 최대 꼭짓점 찾아가는 과정
if button == False: # 현재 내려가던 중이었는데 다음 인덱스부터 금액이 다시 올라가는 경우 = 매수시점
# 매수
coin += cash // price
cash -= coin * price
button = True # up-button up
continue
# 내려가는 과정 (최소 꼭짓점 찾아가는 과정)
elif array[day] >= array[day + 1]:
if button == True: # 현재 금액이 올라가는 상승곡선이었는데 다음 인덱스부터 금액이 다시 내려가는 경우 = 매도시점점
# 매도
cash += price * coin
coin = 0
button = False
continue
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n1713] 후보 추천하기 in python (0) | 2021.09.10 |
---|---|
[n9934] 완전 이진 트리 in python (0) | 2021.09.09 |
[n16507] 어두운 건 무서워 - python (0) | 2021.09.08 |
[n2458] 키순서 in python (0) | 2021.09.03 |
[n14921] 용액 합성하기 in python (0) | 2021.09.02 |