문제 링크

요약

  • 다음에 다시 풀어볼것

최종

  • 를 쭉 나열해보면 점화식을 짤 수 있겠다는게 눈에 보인다.
  • 그걸 이용해 DP로 풀면 된다.
#define MAX(a, b) ((a) > (b) ? (a) : (b))
 
class Solution {
public:
	int maxRotateFunction(vector<int>& nums) {
		int sum = 0;
		int m = nums.size() - 1;
		int fk = 0;
		int max;
 
		// Calc sum, F(0)
		for (int i = 0; i <= m; i++) {
			sum += nums[i];
			fk += i * nums[i];
		}
		max = fk;
 
		// Calc F(1) ~ F(m)
		for (int k = 1; k <= m; k++) {
			fk += sum - (m + 1) * nums[m - k + 1];
			max = MAX(max, fk);
		}
 
		return max;
	}
};

삽질기록

  • 혹시나 해서 brute force 로 해봤는데, 당연히 timeout 난다.