[백준] 11501번: 주식

2022. 10. 3. 21:30TIL💡/Algorithms

https://www.acmicpc.net/problem/11501

 

11501번: 주식

입력의 첫 줄에는 테스트케이스 수를 나타내는 자연수 T가 주어진다. 각 테스트케이스 별로 첫 줄에는 날의 수를 나타내는 자연수 N(2 ≤ N ≤ 1,000,000)이 주어지고, 둘째 줄에는 날 별 주가를 나타

www.acmicpc.net

문제 해결 방법 다 고안해놓고 괜히 10만 개 정도는 배열에 못 넣는 줄 알고 돌아 돌아 접근했다.

알고보니 배열에 넣을 수 있더라...?

 

여기서 주식을 통해 이익을 최대화하는 방법은 주식을 가장 싸게 사서, 가장 비싸게 파는 것이다.

여기서 앞에서부터 주식을 사고, 팔았는데 만약 나중에 더 높은 주식 가격이 나온다면...?

 

곤란하다.

그래서 이런 점을 해소하기 위해 뒤에서부터 높은 주식 가격을 파악해나간다.

이를 통해 예를 들어 가장 높은 주식 가격 다음에 나온 주식들은 그 이후에 존재하는 주식 중 가장 높은 주식 가격일 때 처분한다.

 

이로써 다시 한 번 강조하지만 문제를 어렵게 꼬아서 생각하면 나만 힘들다..

#include <iostream>
#include <vector>
using namespace std;
int main() {
	int T, N;
	cin >> T;
	while(T--) {
		cin >> N;
		long long answer = 0;
		vector<int> stocks(N);
		for(int i = 0;i < N;i++){
			cin >> stocks[i];
		}
		int highest_price = 0;
		for(int i = N - 1;i >= 0;i--) {
			if(stocks[i] > highest_price) {
				highest_price = stocks[i];
			}
			else {
				answer += highest_price - stocks[i];
			}
		}

		cout << answer << '\n';
	}
}

'TIL💡 > Algorithms' 카테고리의 다른 글

[파이썬] queue  (0) 2022.10.07
[백준] 2304번: 창고 다각형(스택을 이용한 최소 구획 정하기)  (0) 2022.10.04
[백준] 4179번: 불!  (0) 2022.10.02
[자료구조] B-트리, B+트리  (0) 2022.09.30
[자료구조] AVL 트리  (0) 2022.09.30