본문 바로가기
알고리즘 (C++)

[백준]11501번: 주식

by Dev_Hugh 2023. 11. 27.
728x90
반응형

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

 

11501번: 주식

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

www.acmicpc.net

 

주어진 예시에서 주가가 10 7 6이면 최대 이익이 0이고 주가가 1 1 3 1 2 면 최대 이익이 5다.

접근 방법은 다음과 같다.

 

1) 배열에 주가를 담아놓는다. ex) 1 1 3 1 2

2) 최대 주가(maxStock)와 최종 이익(totalProfit) 변수를 선언한다. maxStock은 가장 큰 주가를 의미하며 totalProfit은 최대 이익을 의미한다.

3-1) maxStock < 배열의 i번째 주가 인 경우, maxStock = 배열의 i번째 주가로 교체한다.

3-2) 배열의 현재 주가 <= maxStock 인 경우, totalProfit = (maxStock - 배열의 i번째 주가)

이때 반드시 사용한 배열은 clear로 지운 뒤 다시 입력받아야 한다.

#include<iostream>
#include<vector>

#define FastIO ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);

using namespace std;

int main(void)
{
	FastIO;

	int T = 0; // 테스트 케이스 개수 T
	cin >> T;
	int N = 0; // 날의 수 N
	vector<int> greedy;
	while (T--)
	{
		cin >> N;
		long long totalProfit = 0;

		greedy.resize(N, 0);
		for (int i = 0; i < N; i++)
		{
			cin >> greedy[i];
		}

		int maxStock = greedy.back();
		for (int i = greedy.size() - 2; 0 <= i; i--)
		{
			if (maxStock < greedy[i])
			{
				maxStock = greedy[i];
			}
			else
			{
				totalProfit += (maxStock - greedy[i]);
			}
		}

		cout << totalProfit << "\n";
		greedy.clear();
	}
	return 0;
}
728x90
반응형

'알고리즘 (C++)' 카테고리의 다른 글

[백준]25497번: 기술 연계마스터 임스  (0) 2023.12.06
[백준]2018: 수들의 합 5  (0) 2023.12.05
[백준]11652번: 카드  (0) 2023.11.24
[백준]15900번: 나무 탈출  (1) 2023.11.23
[백준]16948번: 데스 나이트  (0) 2023.11.23