여니의 취준 준비/코딩테스트 (Python)

[Python] n20546 | 기적의 매매법

여니's 2021. 4. 27. 22:08


2021.09.27 코드

money = int(input())
array = list(map(int, input().split()))


# 준현
def BNP(money, array):
    count = 0  # 주식 수
    for today in range(len(array)):
        temp = money // array[today]
        money -= temp * array[today]
        count += temp
    money += count * array[-1]
    return money


# 성민
def TIMING(money, array):
    up_cnt = 0  # 상승 연속체크
    down_cnt = 0  # 하락 연속체크
    count = 0  # 주식 수

    for today in range(1, len(array)):
        temp = money // array[today]  # 살 수 있는 주식의 수

        if array[today - 1] < array[today]:  # 주가 상승
            down_cnt = 0
            up_cnt += 1
            if up_cnt >= 3:  # 전량 매도
                money += count * array[today]
                count = 0
            continue

        if array[today - 1] > array[today]:  # 주가 하락
            up_cnt = 0
            down_cnt += 1

            if down_cnt >= 3:  # 전량 매수
                money -= temp * array[today]
                count += temp
            
    money += count * array[-1]
    return money


h = BNP(money, array)
s = TIMING(money, array)

if h > s:
    print("BNP")
elif h == s:
    print("SAMESAME")
else:
    print("TIMING")

money = int(input())
array = list(map(int, input().split()))

# 준현이는 무조건 매수, 그리고 안 판다.
# 성민이는 33 매매법, 현금>주가, 3일 연속 가격이 상승하면 전량 매도, 전날과 오늘날 주가 동일하면 판매x
# 3일 연속 하락하는 건 즉시 주식을 전량매수,
# 1월 14일의 자산 : 현금 + 1월 14일의 주가 * 주식 수
hyeon = money
hyeon_cnt = 0

sung = money
sung_cnt = 0

up = 0 # 가격상승 횟수 세기 위한 변수
down = 0 # 가격하락 횟수 ...

입력값 받아오고,

준현이의 돈과 주식 수량은 hyeon, hyeon_cnt로 정의.

상민이의 돈과 주식 수량은 sung, sung_cnt로 정의

up과 down은 33매매법을 위한 변수


# 준현이의 매수매도
for i in array:
    if i > hyeon:
        continue
    else:
        hyeon_cnt += hyeon // i
        hyeon = hyeon % i

준현이는 BAP 매매법으로,

사고나서 절대 팔지 않는다.

따라서 상민이보다 계산하기 훠얼쓉다아!

주가보다 가지고 있는 돈이 많을 때만 매수를 한다.

 


# 성민이의 매수매도
for i in range(len(array) - 1):
    if array[i] > array[i + 1]:  # 만약 값이 하락했다면, 매수
        if up > 0:
            up = 0
            down += 1
        else:
            down += 1
            if down >= 3 and sung // array[i + 1] > 0:
                sung_cnt += sung // array[i + 1]
                sung = sung % array[i + 1]
    elif array[i] < array[i + 1]:  # 만약 값이 상승했다면, 매도
        if down > 0:
            down = 0
            up = 1
        else:
            up += 1
            if up >= 3 and sung_cnt > 0:
                sung += sung_cnt * array[i + 1]
                sung_cnt = 0
    else: # 값이 같다면, 초기화 시킨다.
        down = 0
        up = 0

상민이의 매수매도를 구하느라 좀 힘겨웠따..

(리스트 인덱스 땜시 매번 헤맨다)

 

값이 3회연속 하락하면 매수를

값이 3회 연속 상승하면 매도를!

만약 값이 같다면 다시 리셋!

 

if sung + sung_cnt * array[-1] > hyeon + hyeon_cnt * array[-1]:
    print("TIMING")
elif sung + sung_cnt * array[-1] < hyeon + hyeon_cnt * array[-1]:
    print("BNP")
else:
    print("SAMESAME")

출력값!