https://www.acmicpc.net/problem/16637
1. ๋ฌธ์ ์์ฝ
๊ธธ์ด๊ฐ N์ธ ์์์์ ์ซ์ 2๊ฐ, ์ฐ์ฐ์ 1๊ฐ๋ง ๊ดํธ๋ก ๋ฌถ์ ์ ์๊ณ , ๊ดํธ๋ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ ์ ์๋ค.
๊ณ์ฐํ ๊ฒฐ๊ณผ ์ค ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
์ฌ๊ธฐ์, N์ ํญ์ ํ์์ด๋ฉฐ, ๊ดํธ๋ฅผ ์ถ๊ฐํ์ง ์์๋ ๋๋ค.
2. ํ์ด
๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ ํ, ๋งค๋ฒ ์ต๋๊ฐ์ ๊ฐฑ์ ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ๊ธฐ ์ํด ๋ฐฑํธ๋ํน์ ์ฌ์ฉํ์๋ค.
๋ชจ๋ ๊ฒฝ์ฐ๋ผํจ์,
์ง๊ธ ์์น์์ ๊ดํธ๋ฅผ ๋ฌถ์ง ์๊ณ ์์ ๋๊น์ง ๊ณ์ฐํ์ ๊ฒฝ์ฐ,
์ง๊ธ ์์น์์ ๊ดํธ๋ฅผ ๋ฌถ๊ณ ์์ ๋๊น์ง ๊ณ์ฐํ์ ๊ฒฝ์ฐ์ด๋ค.
1. N์ ํ์ ๊ณ ์ ์ด๋ฏ๋ก ์์์ ์ง์์๋ฆฌ์๋ ์ซ์, ํ์์๋ฆฌ์๋ ์ฐ์ฐ์๊ฐ ๋ฌด์กฐ๊ฑด ์ฌ ๊ฒ์ด๋ค.
์ง์์๋ฆฌ๋ฉด ์ซ์ ArrayList, ํ์์๋ฆฌ๋ฉด ์ฐ์ฐ์ ArrayList์ ๊ฐ๊ฐ ๋ฃ์ด์คฌ๋ค.
2. ๋, ์ฐ์ฐ์ ์ฐ์ ์์ ์์ด ์ผ์ชฝ๋ถํฐ ์ฐจ๋ก๋๋ก ๊ณ์ฐํ๋ฏ๋ก calc ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ค์ ์ฐ์ฐ์, ์ ์ ์ซ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ calc ์์์ ์ฐ์ฐํ๊ณ ๊ฒฐ๊ณผ๋ฅผ returnํ๋ค.
์ฃผ์ํ ์ ์ ์ธ๋ฑ์ค์ด๋ค. ์ฌ๊ธฐ์ ํท๊ฐ๋ ธ๋๋ฐ,
๋งจ ์ฒ์ sum์ ๋งจ ์ ์ซ์๋ก ๋ฃ์ด์ฃผ๊ณ ์์ํ๋ค. ๊ทธ๋ผ ๋งจ ์ ์ซ์๋ ๊ดํธ๋ฅผ ์น ์ ์์ง ์์๊น?๋ผ๊ณ ์๊ฐํ๋๋ฐ,
์ด๊ฑด ๊ณ ๋ คํด์ค ํ์๊ฐ ์์๋ค.
์ด์ฐจํผ ์ฐ์ฐ์ ์ผ์ชฝ๋ถํฐ ์์์ด๋ค. ๊ดํธ๋ฅผ ๋ฌถ์ง ์๋ ์ฌ๊ทํจ์๋ฅผ ํธ์ถํ๋ฉด, ๋งจ ์ฒ์ ์ซ์์ ๊ทธ ๋ค์ ์ซ์๊ฐ ๊ณ์ฐ๋๋ค.
์ฆ, ์ด ๋์ ๊ดํธ๋ก ๋ฌถ์๊ฑฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
3. ๊ดํธ ์ํ์ ๊ฒฝ์ฐ ์ฌ๊ทํจ์ ํธ์ถ, ๊ดํธ ํ์ ๊ฒฝ์ฐ ์ฌ๊ทํจ์ ํธ์ถ ๋ ๊ฐ์ง๋ก ๋๋๋ค.
๊ธฐ์ ์กฐ๊ฑด์ ์ง๊ธ ์ซ์/์ฐ์ฐ์๊ฐ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋์ด๊ฐ์ ๊ฒฝ์ฐ, max ๊ฐฑ์ ํ return ํด์ฃผ์๋ค.
๋ด๊ฐ ๋์น ๋ถ๋ถ์ ์ ๋ต์ 2^31๋ณด๋ค ์๊ณ , -2^31๋ณด๋ค ํฌ๋ค. ์ด ๋ถ๋ถ์ด๋ค.
2^31 = 2147483648 ์ด๋ค. ์ฆ, ์ต๋๊ฐ์ด ๋ ์ ์๋ ๋ฒ์๋ -2147482648 < max < 2147482648
์ด๋์ ๋ง์ด ๋ณธ ์ซ์๋ค. ๋ฐ๋ก int ๋ฒ์์ ๋น์ทํ๋ค.
๋๋ ์ฒ์์ max = 0์ผ๋ก ์ด๊ธฐํํด์คฌ๋ค. ๊ทธ๋์ ์ ์ถํ๋ฉด ํญ์ ํ๋ ธ๋ค๊ณ ๋ด๋ค..
์ต๋๊ฐ์ผ๋ก -2147483647์ด ๋์ฌ ์๋ ์๋ค. ๋ฐ๋ผ์ max = 0์ด ์๋ max = -2147483648๋ก ์ค์ ํด์ค์ผ ํ๋ค.
max = Integer.MIN_VALUE; ๋ก ํ๋๊น ๋ง์๋ค.
3. ๋ฌธ์ ์
์ ํ๋ ธ๋์ง ๊ณ ๋ฏผํ ๋ ๋ฒ์๊ฐ ๋ฌธ์ ๊ฐ ๋๋๊ฐ.. ์ถ์ด์ ๋ถ๋ช ์ ๋ฌธ๊ตฌ๋ฅผ ๋ดค๋ค
'์ ๋ต์ 2^31๋ณด๋ค ์๊ณ , -2^31๋ณด๋ค ํฌ๋ค.'
์ ๋ต์ด๋ผ๊ณ ์ ํ์์ด์ ์ต๋๊ฐ์ ๋ฒ์๋ผ๊ณ ์๊ฐ๋ชปํ๊ณ ์ง๋์ณค๋ค.
ํ ์คํธ์ผ์ด์ค๋ ๋ค ๋ง๋๋ฐ ํ๋ ธ๋ค๊ณ ๋ฐ ๊ฒฝ์ฐ, ๋ฒ์๋ฅผ ๋ณด๊ณ ๋ ๋ณด์..
4. ์ฝ๋
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class ๊ดํธ์ถ๊ฐํ๊ธฐ {
static int N, max;
static String sik;
static List<Character> op = new ArrayList<>();
static List<Integer> num = new ArrayList<>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
sik = br.readLine();
for (int i = 0; i < sik.length(); i++) {
if (i % 2 == 0)
num.add(sik.charAt(i) - '0');
else
op.add(sik.charAt(i));
}
max = Integer.MIN_VALUE;
dfs(num.get(0), 0, 1);
System.out.println(max);
}
static void dfs(int sum, int opIdx, int numIdx) {
if (numIdx >= num.size() || opIdx >= op.size()) {
max = Math.max(max, sum);
return;
}
// ๊ดํธX
int res1 = calc(sum, op.get(opIdx), num.get(numIdx));
dfs(res1, opIdx + 1, numIdx + 1);
// ๊ดํธO
if (numIdx+1 < num.size()) {
int res2 = calc(sum, op.get(opIdx), calc(num.get(numIdx), op.get(opIdx + 1), num.get(numIdx + 1)));
dfs(res2, opIdx + 2, numIdx + 2);
}
}
static int calc(int num1, char oper, int num2) { // ์ฐ์ฐ ์ฐ์ ์์ ์์ฐ
switch (oper) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
}
return 1;
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 2193 ์ด์น์ (Java) (0) | 2022.09.06 |
---|---|
[BOJ] 15686 ์นํจ๋ฐฐ๋ฌ [Java] (0) | 2022.08.29 |
[BOJ] 1697 ์จ๋ฐ๊ผญ์ง [Java] (0) | 2022.08.25 |
[BOJ] 2606 ๋ฐ์ด๋ฌ์ค [Java] (0) | 2022.08.25 |
[BOJ] 1759 ์ํธ ๋ง๋ค๊ธฐ [Java] (0) | 2022.08.24 |