본문 바로가기
알고리즘/CodeUp PS

[CodeUp][Python] 1283번 : 주식 투자

by 빛밤하늘 2021. 9. 20.
반응형

밑의 링크는 CodeUp에서의 문제 링크입니다.

문제는 링크를 통해서 직접 봐주시길 바랍니다.

 

주식 투자

첫째줄에 투자한 액수 a가 입력됩니다. (100 <= a <= 10,000) 둘째 줄에 투자 일 수 b가 입력됩니다.(1 <= b <= 10) 그 다음줄에 일별 변동폭인 데이터가 날짜 갯수(b개)만큼 퍼센트 정수로 입력됩니다. (변

codeup.kr

 

 

 

주의해야 할 점

1. readline과 int나 float를 사용하는 입력 방식

readline을 사용해서 입력할 때는 맨 끝에 \n이 붙어서 입력됩니다.

하지만, 입력한 값을 int나 float으로 처리해 정수, 실수형으로 만들어 줄 때는 

굳이 \n을 떼기 위해 rstrip을 사용할 필요가 없습니다.

숫자 형태를 만들어줄 때 자동으로 사라집니다.

num = int(sys.stdin.readline())

 

2. map, split를 사용하는 입력 방식

실수나 정수인 여러 값들이 입력값일 때,

split 메서드를 사용해 공백이나 어떤 문자를 기준으로 입력값을 여러 값들로 분리하고,

map 내장 함수로 각각의 값들을 int형이나 float형으로 정수, 실수 자료형으로

변환하는 기법은 매우 많이 쓰입니다.

코드 이해부터 하고 나면 다른 문제에서도 외운 듯이 사용해봅시다.

nums = map(int, sys.stdin.readline().split())

 

3. 소수점 첫째 자리에서 반올림하여 일의 자리까지 숫자로 출력

이번 문제에서는 반올림을 %.0f를 이용해서 출력한다는 힌트를 따로 제공해줬습니다.

그런데 소수점 자릿수를 맞춰서 출력해야 되는 다른 문제에서는 이렇게 힌트를 주지 않는 문제들이 더 많으니

자릿수를 맞춰서 출력하는 방법을 꼭 익혀둡시다.

 

 

예제 설명

1. 첫 번째 예제

- 입력

10000
4
10 -10 5 -5

 

- 출력

-125
bad

 

- 설명

첫째 줄에 입력한 투자한 액수 a는 10000입니다.

둘째 줄에 입력한 투자 일수 b는 4입니다.

그 다음 줄에 날짜 갯수 b개만큼 공백으로 구분해 입력한 -100 ~ 100 범위인 일별 변동폭은 각각 10, -10, 5, -5입니다.

 

첫째 날에는 10000원에서 10%가 올랐으므로 11000원이 되었습니다.

둘째 날에는 11000원에서 10%가 내렸으므로 9900원이 되었습니다.

셋째 날에는 9900원에서 5%가 올랐으므로 10395원이 되었습니다.

넷째 날에는 10395원에서 5%가 내렸으므로 9875.25원이 되었습니다.

처음에 투자한 돈인 10000원에서 9875.25원이 되었으니 최종적으로 손해 -124.75원이 되었으므로, 

출력할 순수익은 소수점 첫째 자리에서 반올림한 -125원입니다.

따라서 첫째 줄에 -125를 출력하고, 손해를 봤으므로 다음 줄에 문자열 'bad'를 출력했습니다.

 

 

생각한 풀이 과정

첫째 줄에 100 <= a <= 10,000인 투자한 액수 a를 입력합니다.

둘째 줄에 1 <= b <= 10인 투자 일수 b를 입력합니다.

그 다음 줄에 날짜 개수 b개만큼 -100 ~ 100 범위인 일별 변동폭을 퍼센트 정수로 공백으로 구분해 입력합니다.

일별 변동폭에 따라 투자 수익을 저장하면서 최종 수익을 저장할 변수 gain을 선언합니다. 

투자한 액수 a의 값으로 초기화합니다.

 

일별 변동폭을 하나씩 반복해봅니다.

현재 변동폭은 퍼센트 정수로 입력된 상태이므로 0.01을 곱하고 gain에 또 곱한 뒤, 그 값을 gain에 더해

하루 투자 후의 변동된 값을 구해서 gain 변수에 다시 넣어줍니다.

 

반복문이 끝나고 나면 모든 날짜가 지난 후 최종 투자 후의 금액인 gain의 값에

처음에 투자한 액수 a를 빼서 순수익을 구하고 변수 net_gain에 저장합니다.

순수익은 소수점 첫째 자리에서 반올림한 값으로 출력합니다.

 

순수익이 0보다 크다면, 이득이므로 문자열 'good'을 출력합니다.

순수익이 0이라면, 본전이므로 문자열 'same'을 출력합니다.

그 외의 경우인 순수익이 0보다 작다면, 손해이므로 문자열 'bad'를 출력합니다.

 

 

제출한 파이썬 코드

# readline을 사용하기 위해 import합니다.
from sys import stdin


# 첫째 줄에 투자한 액수 a를 입력합니다.
# 100 <= a <= 10,000
# int형으로 변환합니다.
a = int(stdin.readline())
# 둘째 줄에 투자 일수 b를 입력합니다.
# 1 <= b <= 10
b = stdin.readline()
# 날짜 개수 b개만큼 일별 변동폭을 퍼센트 정수로 공백으로 구분해 입력합니다.
# -100 ~ 100
# 각각 int형으로 변환합니다.
fluctuations = map(int, stdin.readline().split())
# 투자 후 최종 수익을 저장할 변수를 선언합니다.
# 투자한 액수 a로 초기화합니다.
gain = a

# 일별 변동폭을 하나씩 반복해봅니다.
for fluctuation in fluctuations:
    # 현재 수익인 gain의 값에 현재 변동폭에 대한 계산을 하고 그 값을 다시 gain에 저장합니다.
    gain = gain + gain * fluctuation * 0.01

# 최중 수익인 gain의 값에서 처음 투자한 액수 a의 값을 빼 순수익을 구하고 변수에 저장합니다.
net_gain = gain - a
# 순수익인 net_gain의 값을 소수점 첫째 자리에서 반올림하여 출력합니다.
print('%.0f' % net_gain)

# 순수익이 0보다 크다면
if net_gain > 0:
    # 이득이므로 문자열 'good'을 출력합니다.
    print('good')
# 순수익이 0이라면
elif net_gain == 0:
    # 본전이므로 문자열 'same'을 출력합니다.
    print('same')
# 그 외의 경우인 순수익이 0보다 작다면
else:
    # 손해이므로 문자열 'bad'를 출력합니다.
    print('bad')

 

 

제출 결과

CodeUp 1283번 : 주식 투자에서 코드 제출 결과
CodeUp 1283번 : 주식 투자에서 코드 제출 결과

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

※ 공감 버튼과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍

반응형

댓글