본문 바로가기
프로그래머스

사칙연산 C++

by paysmile 2022. 3. 22.

https://programmers.co.kr/learn/courses/30/lessons/1843

 

코딩테스트 연습 - 사칙연산

["5", "-", "3", "+", "1", "+", "2", "-", "4"] 3

programmers.co.kr

#include <vector>
#include <string>
#include <algorithm>
#include <cstring>

using namespace std;

const int MAX = 205;
int dp[MAX][MAX][2]; //0:최솟값, 1:최댓값

void sol(vector<string> arr, int ii, int jj) {
	for (int k = ii + 1; k < jj; k += 2) {
		if(dp[ii][k-1][0] == 2e9) 	sol(arr, ii, k - 1);
		else if (dp[k + 1][jj][0] == 2e9) sol(arr, k + 1,jj);
		if (arr[k] == "-") {
			dp[ii][jj][0] = min(dp[ii][k - 1][0] - dp[k + 1][jj][1],dp[ii][jj][0]);
			dp[ii][jj][1] = max(dp[ii][k - 1][1] - dp[k + 1][jj][0],dp[ii][jj][1]);
		}
		else {
			dp[ii][jj][0] = min(dp[ii][k - 1][1] + dp[k + 1][jj][1],dp[ii][jj][0]);
			dp[ii][jj][1] = max(dp[ii][k - 1][1] + dp[k + 1][jj][1],dp[ii][jj][1]);
		}
	}
}

int solution(vector<string> arr)
{
	int answer = -1;
	for (int i = 0; i < arr.size(); i++) {
		for (int j = 0; j < arr.size(); j++) {
			dp[i][j][0] = 2e9;
			dp[i][j][1] = -2e9;
		}
	}

	for (int i = 0; i < arr.size(); i += 2) {
		dp[i][i][0] = stoi(arr[i]);
		dp[i][i][1] = stoi(arr[i]);
	}

	sol(arr, 0, arr.size()-1);

	answer = max(dp[0][arr.size()-1][0], dp[0][arr.size() - 1][1]);
	return answer;
}

'프로그래머스' 카테고리의 다른 글

순위 C++  (0) 2022.03.24
기지국 설치 C++  (0) 2022.03.24
단어 퍼즐 C++  (0) 2022.03.22
방의 개수 C++  (0) 2022.03.21
지형 이동 C++  (0) 2022.03.21