Post

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

문제

🐜 기적의 매매법 🐜


아이디어

간단한 구현 문제인데 주의할 점이 2가지 있다.

  1. 준현이는 주식을 살 수 있는 시점에 바로 해당 주가로 매수한다.
    하지만 성민이는 3일 간의 주가를 보고난 후에 매수 또는 매도하기 때문에 다음날 주가로 계산해야 한다.

  2. (성민이만 해당)
    주식을 매수할 상황(3일 연속 하락)일 때는, 다음날 주가 <= 보유한 현금 인지
    주식을 매도할 상황(3일 연속 상승)일 때는, 보유 주식이 있는지

이 조건들을 따지며 준현이와 성민이의 보유 현금, 보유 주식을 계산하고,
총 자산(현금 + 1월 14일의 주가 × 주식 수) 크기에 따라 "BNP", "TIMING", "SAMESAME"을 출력한다.


전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
m = int(input())
stock = list(map(int, input().split()))

a = [m, 0]
for x in stock:
    if x <= a[0]:
        a[1] += a[0]//x
        a[0] -= x*(a[0]//x)
b = [m, 0]
for x, y, z, s in zip(stock, stock[1:], stock[2:], stock[3:]):
    if x < y < z and b[1]:
        b[0] += s*b[1]
        b[1] = 0
    elif x > y > z and s <= b[0]:
        b[1] += b[0]//s
        b[0] -= s*(b[0]//s)

if a[0]+stock[-1]*a[1] == b[0]+stock[-1]*b[1]:
    print("SAMESAME")
elif a[0]+stock[-1]*a[1] > b[0]+stock[-1]*b[1]:
    print("BNP")
else:
    print("TIMING")
This post is licensed under CC BY 4.0 by the author.