코딩테스트/백준
[BOJ 14888] 연산자 끼워넣기 (S1)
34suuuuu
2024. 12. 13. 18:16
📍 문제
https://www.acmicpc.net/problem/14888
📍 문제 풀이
조금 헤맸던 부분은 매번 최소인지 최대인지 판별해주는 코드를 넣었더니 결과가 다르게 나왔다.
‼️ 이 부분 주의
📍 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class boj_14888 {
static int[] nums;
static int[] operators;
static int n;
static int maxValue = Integer.MIN_VALUE;
static int minValue = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
nums = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
operators = new int[4]; // 연산자 갯수
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 4; i++) {
operators[i] = Integer.parseInt(st.nextToken());
}
caclulate(nums[0], 1);
System.out.println(maxValue);
System.out.println(minValue);
}
// (계산 결과)
public static void caclulate(int num, int idx) {
if (idx == n) {
maxValue = Math.max(maxValue, num);
minValue = Math.min(minValue, num);
return;
}
for (int i = 0; i < 4; i++) {
if (operators[i] > 0) {
operators[i]--;
if (i == 0) {
caclulate(num + nums[idx], idx + 1);
} else if (i == 1) {
caclulate(num - nums[idx], idx + 1);
} else if (i == 2) {
caclulate(num * nums[idx], idx + 1);
} else if (i == 3) {
caclulate(num / nums[idx], idx + 1);
}
operators[i]++;
}
}
}
}