[백준] 25644번 최대 상승

거북이·2023년 7월 2일
0

백준[실버5]

목록 보기
104/114
post-thumbnail

💡문제접근

  • 최대 이익을 내기 위해서는 매수시점과 매도시점을 정확히 파악하고 싼 값에 매수를 하고 비싼 값에 매도를 한다는 점을 명심하고 코드를 작성했다.

💡코드1(메모리 : 55064KB, 시간 : 236ms)

import sys
input = sys.stdin.readline

N = int(input())
ANA = list(map(int, input().strip().split()))

Max_benefit = 0    
result = 0
for i in range(N-1, -1, -1):
    Max_benefit = max(Max_benefit, ANA[i])
    result = max(result, Max_benefit - ANA[i])
print(result)

💡코드2(메모리 : 55064KB, 시간 : 144ms)

import sys
input = sys.stdin.readline

N = int(input())
stock = list(map(int, input().strip().split()))

result = 0	
min_price = stock[0]	# 최소 매수가를 인덱스 0번째 원소로 지정함

for i in range(1, N):
    if stock[i] < min_price:	# 해당 시점의 주가가 최소 매수가보다 낮으면?
        min_price = stock[i]	# 당연히 해당 시점일 때 매수를 진행
    else:
        profit = stock[i] - min_price	# 만약 해당 시점의 주가가 최소 매수가보다 높으면? → 당연히 해당 시점의 주가일 때 매도를 해야함
        if profit > result:	# 근데 이 매도가가 우리가 구하고자 하는 최대 이익보다 큰 값이라면? → 최대 이익을 갱신함
            result = profit

print(result)

💡소요시간 : 9m

0개의 댓글