[Python] Code Kata Day17

rang-dev·2020년 7월 4일
0

Wecode - Code Kata

목록 보기
17/18

문제

prices는 배열이며, 각 요소는 매일의 주식 가격입니다. 만약 한 번만 거래할 수 있다면 = 사고 팔 수 있다면, 제일 큰 이익은 얼마일까요?

Input: [7,1,5,3,6,4]
Output: 5
설명: 
2일(가격=1)에 샀다가 5일(가격=6)에 사는 것이 6-1이라 제일 큰 수익
7-1=6 은 안 되는거 아시죠? 먼저 사야 팔 수 있습니다.
Input: [7,6,4,3,1]
Output: 0
설명: 
여기서는 매일 가격이 낮아지기 때문에 거래가 없습니다. 그래서 0

내코드

def maxProfit(prices): 
  min_index  = prices.index(min(prices))
  max_index = prices.index(max(prices[min_index:]))
  
  if min_index == max_index:
    return 0
  else:
    return prices[max_index] - prices[min_index]

최소값의 index를 구하고 그 index의 오른쪽에 최댓값이 있어야 하므로(먼저 사야 팔 수 있으므로) 슬라이싱을 사용해서 가장 작은 수의 오른쪽에서 최댓값을 찾는다. 만약 오른쪽에 더이상 최소값보다 큰 값이 없다면 최댓값은 이미 구한 최솟값과 같을 것이므로 min_indexmax_index가 같다면 0을 return한다.

Model Solution

def maxProfit(prices): 
  max_profit, min_price = 0, float('inf')
  
  for price in prices:
      min_price = min(min_price, price)
      profit = price - min_price
      max_profit = max(max_profit, profit)
      
  return max_profit

실수 데이터에는 양의 무한대와 음의 무한대가 있다. 양의 무한대와 음의 무한대를 나타내는 데이터는 각각 float('inf')와 float('-inf')라는 표현을 이용해 만든다. 무한대는 다른 모든 수보다 크거나, 다른 모든 수보다 작은 수를 표현해야 할 때 사용할 수 있다.(https://python.bakyeono.net/chapter-4-2.html)

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

0개의 댓글