https://www.acmicpc.net/problem/20546
문제 풀이
- 문제에 써있는대로 코드를 구현하려 노력했다
- bnp 매매법은 현재 가지고 있는 돈보다 주식 가격이 낮은 경우 전량 매수 방법으로 코드를 짰다
bnp코드
# bnp
bnp_money = money
bnp_result = 0
for stock in stocks:
if stock <= bnp_money:
bnp += (bnp_money // stock)
bnp_money -= (bnp_money // stock) * stock
# print(bnp, bnp_money)
bnp_result = (stocks[13] * bnp) + bnp_money
- timing 매매법이 좀 까다로웠는데 연속으로 주식 가격이 내려간날(down_count)과 주식 가격이 올라간날(up_count)를 세주면서 3일 이상 내려가거나 올라가면 매수, 매도가 이루어지도록 했다
- for문은 1부터 시작했고, before_stock의 index를 i-1로 표현하여 now_stock(index = i)과 비교할 수 있도록 했다
- 매수 : 주식 가격이 전 날에 비해 내려가면 down_count는 1씩 증가시키고 up_count는 0으로 초기화 할 수 있도록 했고, 3일 연속 주식 가격이 내려갔으면(down_count >= 3) 현재 가지고 있는 돈으로 주식을 전량 매수할 수 있도록 했다
- 매도 : 주식 가격이 전 날에 비해 올라가면 up_count는 1씩 증가시키고 down_count는 0으로 초기화할 수 있도록 했고, 3일 연속 주식 가격이 올라갔으면 (up_count >= 3) 현재 가지고있는 주식을 전량 매도 할 수 있도록 했다
- 현재 주식가격이 전날과 동일하면 up_count와 down_count를 0으로 초기화 시켰다
timing 코드
# timing
timing_money = money
timing_result = 0
for i in range(1, len(stocks)):
before_stock = stocks[i-1]
now_stock = stocks[i]
# 매수
if before_stock > now_stock:
down_count += 1
up_count = 0
if down_count >= 3:
timing += (timing_money // stocks[i])
timing_money -= (timing_money // stocks[i]) * stocks[i]
# 매도
if before_stock < now_stock:
up_count += 1
down_count = 0
if up_count >= 3:
timing_money += timing * stocks[i]
timing = 0
# 초기화
if before_stock == now_stock:
down_count = 0
up_count = 0
timing_result = (stocks[13] * timing) + timing_money
전체 코드
money = int(input())
stocks = list(map(int, input().split()))
bnp = 0 # bnp 주식개수
timing = 0 # timing 주식개수
# bnp
bnp_money = money
bnp_result = 0
for stock in stocks:
if stock <= bnp_money:
bnp += (bnp_money // stock)
bnp_money -= (bnp_money // stock) * stock
# print(bnp, bnp_money)
bnp_result = (stocks[13] * bnp) + bnp_money
down_count = 0 # 연속으로 내려간 날
up_count = 0 # 연속으로 올라간날
before_stock = 0 # 현재 stock과 비교할 그 전날 stock
now_stock = 0 # 현재 stock
# timing
timing_money = money
timing_result = 0
for i in range(1, len(stocks)):
before_stock = stocks[i-1]
now_stock = stocks[i]
# 매수
if before_stock > now_stock:
down_count += 1
up_count = 0
if down_count >= 3:
timing += (timing_money // stocks[i])
# print(timing_money // stocks[i])
timing_money -= (timing_money // stocks[i]) * stocks[i]
# 매도
if before_stock < now_stock:
up_count += 1
down_count = 0
if up_count >= 3:
timing_money += timing * stocks[i]
timing = 0
# 초기화
if before_stock == now_stock:
down_count = 0
up_count = 0
# print(now_stock, up_count, down_count, timing, timing_money)
timing_result = (stocks[13] * timing) + timing_money
# print(bnp_result, timing_result)
if bnp_result > timing_result:
print('BNP')
elif bnp_result < timing_result:
print('TIMING')
else:
print('SAMESAME')