4월 28일(금) - 백트랙킹 (14888번)
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static int MAX = Integer.MIN_VALUE; // 최댓값
public static int MIN = Integer.MAX_VALUE; // 최솟값
public static int[] operator = new int[4]; // 연산자 개수
public static int[] number; // 숫자
public static int N; // 숫자 개수
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
number = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < N; i++) {
number[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < 4; i++) {
operator[i] = Integer.parseInt(st.nextToken());
}
dfs(number[0], 1);
System.out.println(MAX);
System.out.println(MIN);
}
public static void dfs(int num, int idx) {
if (idx == N) {
MAX = Math.max(MAX, num);
MIN = Math.min(MIN, num);
return;
}
for (int i = 0; i < 4; i++) {
if (operator[i] > 0) {
operator[i]--;
switch (i) {
case 0: dfs(num + number[idx], idx + 1); break;
case 1: dfs(num - number[idx], idx + 1); break;
case 2: dfs(num * number[idx], idx + 1); break;
case 3: dfs(num / number[idx], idx + 1); break;
}
operator[i]++;
}
}
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이출처 -> https://st-lab.tistory.com/121
'백준(Java) > 23년 4월' 카테고리의 다른 글
[Java] 백준 - 15652번: N과 M (4) (0) | 2023.04.27 |
---|---|
[Java] 백준 - 15651번: N과 M (3) (0) | 2023.04.26 |
[Java] 백준 - 15650번: N과 M (2) (0) | 2023.04.25 |
[Java] 백준 - 15649번: N과 M (1) (0) | 2023.04.24 |
[Java] 백준 - 1010번: 다리 놓기 (0) | 2023.04.21 |
댓글