14888 JAVA μ°μ°μ λΌμλ£κΈ°
π λ¬Έμ
Nκ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄ A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. λ, μμ μ μ¬μ΄μ λΌμλ£μ μ μλ N-1κ°μ μ°μ°μκ° μ£Όμ΄μ§λ€. μ°μ°μλ λ§μ (+), λΊμ (-), κ³±μ (×), λλμ (÷)μΌλ‘λ§ μ΄λ£¨μ΄μ Έ μλ€.
μ°λ¦¬λ μμ μ μ¬μ΄μ μ°μ°μλ₯Ό νλμ© λ£μ΄μ, μμμ νλ λ§λ€ μ μλ€. μ΄λ, μ£Όμ΄μ§ μμ μμλ₯Ό λ°κΎΈλ©΄ μ λλ€.
μλ₯Ό λ€μ΄, 6κ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄μ΄ 1, 2, 3, 4, 5, 6μ΄κ³ , μ£Όμ΄μ§ μ°μ°μκ° λ§μ (+) 2κ°, λΊμ (-) 1κ°, κ³±μ (×) 1κ°, λλμ (÷) 1κ°μΈ κ²½μ°μλ μ΄ 60κ°μ§μ μμ λ§λ€ μ μλ€. μλ₯Ό λ€μ΄, μλμ κ°μ μμ λ§λ€ μ μλ€.
1+2+3-4×5÷6
1÷2+3+4-5×6
1+2÷3×4-5+6
1÷2×3-4+5+6
μμ κ³μ°μ μ°μ°μ μ°μ μμλ₯Ό 무μνκ³ μμμλΆν° μ§νν΄μΌ νλ€. λ, λλμ μ μ μ λλμ μΌλ‘ λͺ«λ§ μ·¨νλ€. μμλ₯Ό μμλ‘ λλ λλ C++14μ κΈ°μ€μ λ°λ₯Έλ€. μ¦, μμλ‘ λ°κΎΌ λ€ λͺ«μ μ·¨νκ³ , κ·Έ λͺ«μ μμλ‘ λ°κΎΌ κ²κ³Ό κ°λ€. μ΄μ λ°λΌμ, μμ μ 4κ°μ κ²°κ³Όλ₯Ό κ³μ°ν΄λ³΄λ©΄ μλμ κ°λ€.
1+2+3-4×5÷6 = 1
1÷2+3+4-5×6 = 12
1+2÷3×4-5+6 = 5
1÷2×3-4+5+6 = 7
Nκ°μ μμ N-1κ°μ μ°μ°μκ° μ£Όμ΄μ‘μ λ, λ§λ€ μ μλ μμ κ²°κ³Όκ° μ΅λμΈ κ²κ³Ό μ΅μμΈ κ²μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
π μ λ ₯
첫째 μ€μ μμ κ°μ N(2 ≤ N ≤ 11)κ° μ£Όμ΄μ§λ€. λμ§Έ μ€μλ A1, A2, ..., ANμ΄ μ£Όμ΄μ§λ€. (1 ≤ Ai ≤ 100) μ μ§Έ μ€μλ ν©μ΄ N-1μΈ 4κ°μ μ μκ° μ£Όμ΄μ§λλ°, μ°¨λ‘λλ‘ λ§μ (+)μ κ°μ, λΊμ (-)μ κ°μ, κ³±μ (×)μ κ°μ, λλμ (÷)μ κ°μμ΄λ€.
π μΆλ ₯
첫째 μ€μ λ§λ€ μ μλ μμ κ²°κ³Όμ μ΅λκ°μ, λμ§Έ μ€μλ μ΅μκ°μ μΆλ ₯νλ€. μ°μ°μλ₯Ό μ΄λ»κ² λΌμλ£μ΄λ νμ -10μ΅λ³΄λ€ ν¬κ±°λ κ°κ³ , 10μ΅λ³΄λ€ μκ±°λ κ°μ κ²°κ³Όκ° λμ€λ μ λ ₯λ§ μ£Όμ΄μ§λ€. λν, μμμλΆν° κ³μ°νμ λ, μ€κ°μ κ³μ°λλ μμ κ²°κ³Όλ νμ -10μ΅λ³΄λ€ ν¬κ±°λ κ°κ³ , 10μ΅λ³΄λ€ μκ±°λ κ°λ€.
μμ
π μμ μ λ ₯ 1
2
5 6
0 0 1 0
π μμ μΆλ ₯ 1
30
30
π μμ μ λ ₯ 2
3
3 4 5
1 0 1 0
π μμ μΆλ ₯ 2
35
17
π μμ μ λ ₯ 3
6
1 2 3 4 5 6
2 1 1 1
π μμ μΆλ ₯ 3
54
-24
μ½λ κ³Όμ
μ κ·Ό λ°©λ²
λͺ¨λ κ²½μ°μ μλ₯Ό λ€ νμΈν΄λ΄μΌ νκΈ° λλ¬Έμ λ°±νΈλνΉ λ°©μμ μ¬μ©νλ€. μ΄ λ, μ«μμ μμΉλ λ³νμ§ μκΈ° λλ¬Έμ μ°μ°μμ μμΉλ§ νμΈνλ©΄ λλ€. visitedλ₯Ό μ¬μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν κΉ κ³ λ―Όλ νμ§λ§, 4κ°μ μ°μ°μλ₯Ό μ«μλ‘ λ°μμ€κΈ° λλ¬Έμ κ·Έ κ°μ΄ 0μΈ κ²½μ°λ©΄ μ΄λ―Έ μ¬μ©ν κ²μΌλ‘ μκ°νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νλ€.
μ½λ
import java.io.*;
import java.util.*;
public class Main{
public static int[] arr;
public static int[] calArr;
public static int max = Integer.MIN_VALUE;
public static int min = Integer.MAX_VALUE;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
arr = new int[n];
calArr = new int[4];
StringTokenizer st = new StringTokenizer(br.readLine());
// μ«μ
for (int i = 0; i < n ; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
// μ¬μΉμ°μ°
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 4; i++){
calArr[i] = Integer.parseInt(st.nextToken());
}
backTracking(arr[0], n, 1);
System.out.println(max);
System.out.println(min);
}
public static void backTracking(int answer, int n, int depth){
if(n == depth){
max = Math.max(max, answer);
min = Math.min(min, answer);
return;
}
for(int i = 0 ; i < 4 ; i++){
if(calArr[i] == 0) continue;
calArr[i]--;
switch (i) {
case 0: backTracking(answer + arr[depth], n, depth + 1); break;
case 1: backTracking(answer - arr[depth], n, depth + 1); break;
case 2: backTracking(answer * arr[depth], n, depth + 1); break;
case 3: backTracking(answer / arr[depth], n, depth + 1); break;
}
calArr[i]++;
}
}
}