-
[알고리즘][백준] 11501. 주식알고리즘 2024. 5. 14. 00:08반응형
문제
https://www.acmicpc.net/problem/11501
문제 아이디어
1 5 8 15 4 7 8 3 6 위와 같이 1, 5, 8, 15, 4, 7, 2, 3, 2 가 있다고 생각해 봅시다. 여기서 최대로 팔아먹으려면 최대한 큰 비용일 때 팔아야 되는데,
- 예를 들어 맨 처음 1, 5, 8 은 15일 때 가장 비싸게 팔릴 것입니다.
- 15는 언제 팔아도 비쌀 수가 없죠. 자신이 가장 비싸거든요. 안 사는게 이득입니다.
- 4와 7은 8일 때 가장 비싸게 팔립니다.
- 8은 해봐야 자기 자신일 때 밖에 없습니다. 역시 안 사는게 이득입니다.
- 3은 6일 때 가장 비싸게 팔립니다.
- 6도 안 사는게 이득입니다.
즉 주식을 산 시점부터 뒤를 탐색하면서 가장 비쌀 때 파는게 이득이라는 얘긴데, 위의 표를 보고 가장 이득이 크게끔 판매하기 위해서 아래 표로 정리하면 다음과 같습니다.
1 5 8 15 4 7 8 3 6 15 15 15 15 8 8 8 6 6 결국 뒤에서부터 쭉 탐색하면서 가장 큰 값으로 업데이트하면 되는 문제였습니다!
import sys imput = sys.stdin.readline T = int(input()) for t in range(T): N = int(input()) li = list(map(int, input().rstrip().split())) mx = [0 for _ in range(N + 1)] currMx = 0 sum = 0 for idx, value in enumerate(li[::-1]): # print(idx, value) currMx = max(value, currMx) mx[idx] = currMx mx.reverse() mx.pop(0) for n in range(N): sum += mx[n] - li[n] print(sum)
반응형'알고리즘' 카테고리의 다른 글
[알고리즘][백준] 4358. 생태학 (0) 2024.05.15 [알고리즘][백준] 20006. 랭킹전 대기열 (0) 2024.05.10 [알고리즘][백준] 20310. 타노스 (0) 2024.05.06 [알고리즘][백준] 13305. 주유소 (1) 2024.05.03 [알고리즘][백준] 3758. KCPC (0) 2024.05.02