알고리즘
bj16637-괄호 추가하기(구현, 재귀)
쥐4
2025. 4. 5. 20:40
https://www.acmicpc.net/problem/16637
연산을 어떻게 코드로 짤 지 고민을 해보아야하는 문제이다.
숫자 따로, 연산 문자 따로 나눠 배열로 처리하면 쉽게 풀 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int N, answer = Integer.MIN_VALUE;
static int[] nums;
static char[] cals;
static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
initialize();
solve(0,nums[0]);
System.out.println(answer);
}
private static void solve(int index, int value) {
if(index >= N/2){
answer = Math.max(value, answer);
return;
}
//바로 계산 후 넘어가기
solve(index+1, calculate(cals[index], value, nums[index+1]));
//다음꺼 괄호 계산 후 넘어가기
if(index >= N/2-1)return;
solve(index+2, calculate(cals[index], value, calculate(cals[index+1], nums[index+1], nums[index+2])));
}
private static int calculate(char cal, int i1, int i2) {
switch (cal) {
case '+':
return i1 + i2;
case '-':
return i1 - i2;
case '*':
return i1 * i2;
}
return 0;
}
private static void initialize() throws IOException {
N = Integer.parseInt(bufferedReader.readLine());
nums = new int[N/2 + 1];
cals = new char[N/2];
String rawLine = bufferedReader.readLine();
for(int i = 0; i < N; i++){
if(i % 2 == 0) {
nums[i/2] = Character.getNumericValue(rawLine.charAt(i));
continue;
}
cals[i/2] = rawLine.charAt(i);
}
}
}