728x90
반응형
[문제그림]
문제링크
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
1. 핵심
- 정렬은 불가능하다. 왜냐하면 파는 시점과 사는 시점이 섞일 수는 없기 때문이다.
- 자동차를 파는 시점 기준(r)으로 그 전(0 ~ r - 1)에 언제 자동차를 사야했는가?
- 이익을 최대화하기 위해서는 사는 가격을 최소화해야한다.
- 즉, 파는 시점 기준 첫 날부터 팔기 전 날까지의 가격 중 최솟값을 골라야한다.
- 그렇다면 팔기 전까지의 최소값을 기록해야한다.
- n이 100,000이므로 이중 for문은 당연히 사용할 수 없으니 다른 방법을 찾아야하는데...
- 최소값을 누적하는 배열을 만들자!!
- 누적합과 비슷하게 진행한다.
- 그 전과 비교하면서 최솟값 유지( pmin[i + 1] , pmin[i] )
inf = int(1e9)
pmin = [inf for _ in range(n + 1)]
ans = inf
for i in range(n):
pmin[i + 1] = min(pmin[i], nums[i])
2. 코드(Python)
# 정렬은 불가
# 쌍 문제는 하나을 고정한다!!
n = int(input())
nums = list(map(int, input().split()))
# 누적 최소값
inf = int(1e9)
pmin = [inf for _ in range(n + 1)]
ans = inf
for i in range(n):
pmin[i + 1] = min(pmin[i], nums[i])
ans = 0
for i in range(n):
ans = max(ans, nums[i] -pmin[i + 1])
print(ans)
728x90
반응형
'PS > 코드트리' 카테고리의 다른 글
[투포인터] Parametric Search / 최대 거리의 점 (2) | 2024.02.14 |
---|---|
[그리디] Greedy Algorithm / 높은 숫자의 카드가 이기는 게임 (0) | 2024.02.13 |
[그리디] 최대 숫자 만들기 (0) | 2024.02.13 |
[BFS] 가중치가 동일한 그래프에서의 BFS / k개의 벽 없애기 (2) | 2024.02.11 |
[BFS] 가중치가 동일한 그래프에서의 BFS / 4가지 연산을 이용하여 1 만들기 (1) | 2024.02.11 |