[CodeKata] 14. maxProfit

그냥·2022년 6월 28일
0

CodeKata

목록 보기
14/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을 반환해라.


풀이


1. 문제의 조건 정리
1) 양수로 이루어진 배열을 인자로 받는다.
2) 정수를 반환한다.
3) 배열의 요소가 index가 커질수록 요소의 값이 작아진다면 0을 반환한다.

2. 조건에 대한 코드 구현 방법 생각
1) 이중 for 문을 사용해서 두 개의 요소의 차이를 새로운 리스트에 append 한다.
2) 이중 for 문 사용시 첫 번째 for 문의 인덱스가 두 번째 인덱스보다 크거나 같으면 continue 한다.
3) 그 반대면 요소의 차이의 값을 리스트에 append 한다.
4) 모든 요소의 값이 0보다 작으면 0을 반환한다.

3. 구현 코드
def maxProfit(prices):
    lst = []

    for i in range(len(prices)):
        for j in range(len(prices)):
            if i >= j:
                continue
            else:
                lst.append(prices[j] - prices[i])
                
    result = max(lst)

    if result < 0:
      return 0
    else:
      return result

4. 코드 리뷰
1) 이중 for문을 사용하지 않고 푸는 방법이 있을 것 같다.
2) 0을 반환하는 if문을 위 if문에 포함하는 방법이 있으면 좀 더 간결할 것 같다.

0개의 댓글