본문 바로가기
알고리즘

[BOJ / 20546 / Python] 기적의 매매법

by 치우치지않는 2023. 9. 19.

[ 문제 ]

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

 

20546번: 🐜 기적의 매매법 🐜

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

www.acmicpc.net

[ 난이도 ]

실버 5

[ 필요 개념 ]

그리디

[ 풀이 ]

종현이와 성민이의 현금, 매수 가능 주식 수, 보유 주식 수를 변수에 저장하고, 종현이는 그리디 알고리즘으로, 성민이는 if 문을 이용해 특정 케이스에서만 전량 매수 혹은 매도를 하게끔 유도하였다. 

[ 소스코드 ]

seedMoney = int(input())

JHMoney = seedMoney 
SHMoney = seedMoney

JHBoughtStockNum = SHBoughtStockNum = 0

inputStockText = input()
stockTextList = inputStockText.split()
stockIntList = [int(item) for item in stockTextList]

# print(stockIntList)

for i in range(14):
  # 종현이의 과정
  stock = stockIntList[i]
  JHAffordableStockNum = JHMoney // stock
  JHMoney -= JHAffordableStockNum * stock
  JHBoughtStockNum += JHAffordableStockNum
  # 성민이의 과정 
  if i > 1 :
    if stockIntList[i-1] - stockIntList[i-2] > 0 and stockIntList[i-2] - stockIntList[i-3] > 0 :
      #3일 연속 주가 상승 > 전량 매도
      SHMoney += SHBoughtStockNum * stockIntList[i] 
      SHBoughtStockNum = 0
      # print('매도')
      # print(str(i+1)+'일')
      # print(str(SHBoughtStockNum)+'주')
    if stockIntList[i-1] - stockIntList[i-2] < 0 and stockIntList[i-2] - stockIntList[i-3] < 0 :
      #3일 연속 주가 하락 > 전량 매수
      stock = stockIntList[i]
      SHAffordableStockNum = SHMoney // stock
      SHMoney -= SHAffordableStockNum * stock
      SHBoughtStockNum += SHAffordableStockNum
      # print('매수')
      # print(str(i+1)+'일')
      # print(str(SHAffordableStockNum)+'주')
  
  
# print(JHBoughtStockNum*stockIntList[13] + JHMoney)
# print(SHBoughtStockNum*stockIntList[13] + SHMoney)

JHResult = JHBoughtStockNum*stockIntList[13] + JHMoney
SHResult = SHBoughtStockNum*stockIntList[13] + SHMoney

if JHResult > SHResult :
  print('BNP')
elif JHResult < SHResult :
  print('TIMING')
else :
  print('SAMESAME')

댓글