본문 바로가기

코딩테스트/Python

[Python] 백준 #20546 - 기적의 매매법

문제


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

 

20546번: 🐜 기적의 매매법 🐜

1월 14일 기준 준현이의 자산이 더 크다면 "BNP"를, 성민이의 자산이 더 크다면 "TIMING"을 출력한다. 둘의 자산이 같다면 "SAMESAME"을 출력한다. 모든 결과 따옴표를 제외하고 출력한다.

www.acmicpc.net

 

 

 

풀이


n = int(input())
arr = input().split()

p1_m,p1_j = n,0 # BNP 전략
p2_m,p2_j = n,0 # TIMING 전략
p2_arr = []

arr = list(map(int,arr))

for cost in arr:
    # BNP 전략
    p1_j += p1_m//cost # 살 수 있는만큼 매수
    p1_m = p1_m%cost # 매수하고 남은 돈

    # TIMING 전략
    p2_arr.append(cost)
    if len(p2_arr) >= 4: 
        if p2_arr[0] > p2_arr[1] > p2_arr[2]: # 3일 연속 하락하면 다음날 가격으로 매수
            p2_j += p2_m//cost # 살 수 있는만큼 매수
            p2_m = p2_m%cost # 매수하고 남은 돈
        elif p2_arr[0] < p2_arr[1] < p2_arr[2]: # 3일 연속 상승하면 다음날 가격으로 매도
            p2_m += p2_j*cost # 전량 매도
            p2_j = 0 
        p2_arr.pop(0)

if p1_m + arr[-1]*p1_j > p2_m + arr[-1]*p2_j:
    print('BNP')
elif p1_m + arr[-1]*p1_j < p2_m + arr[-1]*p2_j:
    print('TIMING')
else:
    print('SAMESAME')

 

p1은 BNP 전략, p2는 TIMING 전략 계산 변수이다.

 

BNP 전략은 주식을 살 수 있으면 매수하게 하였다.

 

TIMING 전략은 3일 가격을 비교한 후, 3일연속 하락하면 다음날 가격으로 매수, 3일연속 상승하면 다음날 가격으로 매도하게 하였다.