728x90
https://www.acmicpc.net/problem/16637
16637๋ฒ: ๊ดํธ ์ถ๊ฐํ๊ธฐ
์ฒซ์งธ ์ค์ ์์์ ๊ธธ์ด N(1 ≤ N ≤ 19)๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ ์์์ด ์ฃผ์ด์ง๋ค. ์์์ ํฌํจ๋ ์ ์๋ ๋ชจ๋ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 9๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ๋ฌธ์์ด์ ์ ์๋ก ์์ํ๊ณ , ์ฐ์ฐ์์ ์ ์๊ฐ
www.acmicpc.net
โจ ๋ด ์์ค ์ฝ๋
#include <iostream>
#include <string>
using namespace std;
string s;
int N, max_n = -987654321987654321;
int calcu(char op, int n1, int n2) {
int result = 0;
switch (op)
{
case '+':
result = n1 + n2;
break;
case '-':
result = n1 - n2;
break;
case '*':
result = n1 * n2;
break;
}
return result;
}
void func(int n, int sum, char op) {
//ํ์ฌ ์์น๊ฐ ๋ฌธ์์ด ๊ธธ์ด๋ณด๋ค ํฌ๋ฉด ์ข
๋ฃ
if (n > N - 1) {
if (max_n < sum) {
max_n = sum;
}
return;
}
//๊ดํธ ๊ณ์ฐ
if (n + 2 < N) {
int temp = calcu(s[n + 1], s[n] - '0', s[n + 2] - '0');
//n+2๊ฐ ๋ง์ง๋ง ์ซ์์ด๊ณ n+3์ ๋ฒ์๋ฅผ ๋์์ ๊ฒฝ์ฐ ์ฒ๋ฆฌ, ์ฆ ๊ดํธ๋ก ๋ ๋ฌถ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
if (n + 3 > N - 1) {
func(n + 4, calcu(op, sum, temp), 'x');
}
//๋ค์ ๊ดํธ๋ก ๋ ๋ฌถ์ ์ ์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
else {
func(n + 4, calcu(op, sum, temp), s[n + 3]);
}
}
//๊ดํธ ์์ด ๊ณ์ฐ
func(n + 2, calcu(op, sum, s[n] - '0'), s[n + 1]);
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
cin >> s;
func(0, 0, '+');
cout << max_n;
return 0;
}
๐ ๋ฌธ์ ํ์ด
์ฌ๊ท๋ฅผ ๋๋ ค์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ํ์ํด๋ณด๊ณ ๊ทธ ์ค์์ ์ต๋๊ฐ์ ์ฐพ๋๋ค
'์ ๋ต์ 2^31๋ณด๋ค ์๊ณ , -2^31๋ณด๋ค ํฌ๋ค' ๋ผ๋ ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์ max_n์ ์ด๊ธฐ๊ฐ์ -2^31๋ก ์ค์
+) ๋ค์์๋ ์ด๊ธฐ๊ฐ ์ค์ ๋์ max()ํจ์ ์ฌ์ฉํด์ ๋ต ๊ตฌํ๋ ๊ฑธ ์ฐ์ตํด์ผ ๋ ๋ฏ
โญ ๋ฌธ์ ํ์ด ๊ฒฐ๊ณผ

728x90