1일1알

백준 22945번 팀 빌딩 C++ 본문

알고리즘

백준 22945번 팀 빌딩 C++

영춘권의달인 2022. 3. 7. 10:55

출처 : https://www.acmicpc.net/problem/22945

 

N이 최대 10만이기 때문에 브루트포스로 풀면 10만x10만 = 100억이 나와서 시간초과가 날 것 같아서 투 포인터로 문제를 해결하였다. 

제일 왼쪽과 제일 오른쪽에서 각각 시작하여 둘 중 작은 값을 움직이면서 최대값을 구했다.

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>

using namespace std;
using ll = long long;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;
	vector<int> v(n);
	for (int i = 0; i < n; i++) {
		cin >> v[i];
	}
	int left = 0;
	int right = n - 1;
	int ans = 0;
	while (left < right) {
		ans = max(ans, (right - left - 1) * min(v[left], v[right]));
		if (v[left] < v[right]) left++;
		else right--;
	}
	cout << ans;
};