본문 바로가기
Python/PS in Python

LeetCode 121. Best Time to Buy and Sell Stock - Python

by Air’s Big Data 2020. 8. 24.

Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Note that you cannot sell a stock before you buy one.

 

 

 

 

Example 1:

Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
             Not 7-1 = 6, as selling price needs to be larger than buying price.

 

Example 2:

Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.

 

Solution:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:        
        minPrice = float(inf) #임의의 가장 큰 수 inf
        profit = 0
        maxProfit = 0

        for i in range(len(prices)):
            minPrice = min(minPrice, prices[i])
            maxProfit = max(maxProfit, prices[i] - minPrice)

        return maxProfit

 

 

(참고 개념)

#임의의 가장 큰 수 inf

  • 최솟 값을 저장하는 변수에 임의의 가장 큰 값을 할당해야 할 때 파이썬에서는 비교할 데이터가 아주 큰 경우 정상 작동하지 않을 수 있다.
  • 파이썬이 제공하는 inf를 사용하면 inf는 어떤 숫자와 비교해도 무조건 크다고 판정된다.
  • 음수 기호를 붙일 수도 있다.
max_val = float('inf') # 무조건 큰 값
max_val > 10000
# True

min_val = float('-inf') # 무조건 작은 값
min_val < -1000
# True

 

#int와 float의 차이

숫자라는 것은 4나 4.0이나 같은 것입니다. 하지만 파이썬에서는 다릅니다. 이 둘은 동시에 연산을 할 수 있기는 하겠으나, 값이 같을지는 몰라도 같은 타입은 아닙니다. 4는 정수고, 4.0은 수소점이 있는 수이기 때문이죠. 전자를 int라고 부르고 후자를 float이라고 부릅니다.

 

 

(참고 사이트)

https://siyoon210.tistory.com/94

https://velog.io/@dadumvu/Leetcode-121.-Best-Time-to-Buy-and-Sell-Stock

https://programmers.co.kr/learn/courses/4008/lessons/52865

https://lar542.github.io/Python/2019-07-11-python8/

https://alegruz.imweb.me/blog/?idx=244919&bmode=view

 

댓글