ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/

 

MaxProfit coding task - Learn to Code - Codility

Given a log of stock prices compute the maximum possible earning.

app.codility.com


문제 풀이

리슀트의 κ°’ 듀은 μ£Όμ‹μ˜ 가격을 λ‚˜νƒ€λ‚΄κ³ , μΈλ±μŠ€λŠ” λ‚ μ§œμ΄λ‹€.

주식을 μ‚° 후에 νŠΉμ • λ‚ μ§œμ— νŒλ§€ν•˜μ˜€μ„ λ•Œ κ°€μž₯ 큰 이득을 λ°˜ν™˜ν•˜λ©΄ λœλ‹€.

이득이 μ—†λŠ” 경우(λ§ˆμ΄λ„ˆμŠ€) μ—λŠ” 0을 λ°˜ν™˜ν•œλ‹€.


μ½”λ“œ

def solution(A):
    if len(A) < 2:
        return 0

    max_profit = None
    min_price = A.pop(0)

    for price in A:
        cur_profit = price - min_price
        if price < min_price:
            min_price = price

        if max_profit is None:
            max_profit = cur_profit
        else:
            max_profit = max(max_profit, cur_profit)

    return max_profit if max_profit > 0 else 0
  • 브루트 포슀둜 ν’€κ²Œ 되면 O(N^2)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§€κ²Œ λœλ‹€.

  • μ΅œμ†Œκ°’κ³Ό ν˜„μž¬ 값을 λΉ„κ΅ν•˜μ—¬ μ΅œλŒ€ 이읡이 λ°œμƒν•˜λŠ”μ§€ ν™•μΈν•˜λ©΄ O(N)의 μ‹œκ°„ λ³΅μž‘λ„λ‘œ 문제λ₯Ό ν’€ 수 μžˆλ‹€.

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€