문제 20546 기적의 매매법

Sungmin·2023년 5월 23일
0

https://www.acmicpc.net/problem/20546

Solution

n = int(input())
day = list(map(int, input().split()))

jun_m = n
jun_c = 0
sung_m = n
sung_c = 0
arr = []

for i in day:
    jun_c += jun_m // i #주식수
    jun_m = jun_m % i #현금

    arr.append(i)
    if len(arr) >= 4:
        if arr[0] > arr[1] > arr[2]: #매수
            sung_c += sung_m // i 
            sung_m = sung_m % i
        elif arr[0] > arr[1] > arr[2]: #매도
            sung_m += sung_c * i
            sung_c = 0
        arr.pop(0)
        
if jun_m + jun_c*day[-1] > sung_m + sung_c * day[-1]:
    print('BNP')
elif jun_m + jun_c*day[-1] < sung_m + sung_c * day[-1]:
    print('TIMING')
else:
    print('SAMESAME')

배운점

준현
주식수를 계산할 때 꼭 +=을 해 주어야 한다.
이유는 갖고있는 현금보다 가격이 큰 경우 0을 더해주면 다음으로 넘어갈 수 있기 때문이다.

성민이의 경우 arr 리스트를 따로 만들어 주어 3번연속 상승 또는 하락을 확인할 수 있게 해 주었다.

구현 문제가 다른 알고리즘에 비해 푸는 시간이 오래 걸리고 어렵게 느껴질 때가 많은데 더 많은 문제를 꾸준히 풀어 봐야 실력이 늘 것 같다.

profile
Let's Coding

0개의 댓글