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);
}
}
}
'알고리즘' 카테고리의 다른 글
bj1092(배)-그리디 *복습* (1) | 2025.04.09 |
---|---|
프로그래머스-등산 코스 정하기(다익스트라) (0) | 2025.04.07 |
프로그래머스-미로 탈출 명령어(BFS) (0) | 2025.04.03 |
bj3687(그리디, dp) - 성냥개비 (0) | 2025.03.31 |
bj7453(합이 0인 네 정수) - 구현, 정렬, 투포인터, 중간에서 만나기 (0) | 2025.03.24 |