본문 바로가기

Algorithm/BAEKJOON

[BOJ] 22945번 팀 빌딩 (C++)

728x90
반응형

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

 

22945번: 팀 빌딩

능력치가 다 다른 개발자 $N$명이 팀 빌딩을 위해 한 줄로 서있다. 하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다. 개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같

www.acmicpc.net

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
	int n;
	cin >> n;
	vector<int> v;
	for(int i = 0; i < n; i++){
		int x;
		cin >> x;
		v.push_back(x);
	}
	
	int l = 0;
	int r = v.size() - 1;
	
	int max = 0;
	while(l < r){
		int a = (r - l - 1) * min(v[l], v[r]);
		if(a > max) max = a;
		
		if(v[l] < v[r]) l++;
		else r--;
	}
	cout << max << endl;
	return 0;
}

 

구간이 줄어들 때 A와 B 사이의 개발자 수는 무조건 줄게 되므로 l, r 포인터를 이동시킬 때 팀 능력치를 최대로 할 수 있도록 이동시켜야 한다. 현재 l, r 포인터 중 더 작은 것을 가리키고 있는 포인터를 이동시키면 팀 능력치의 손실을 줄일 수 있다.

728x90
반응형