PS/BaekJoon

14888 JAVA μ—°μ‚°μž λΌμ›Œλ„£κΈ°

chaerlo127 2024. 2. 4. 21:46
728x90
 

14888번: μ—°μ‚°μž λΌμ›Œλ„£κΈ°

첫째 쀄에 수의 개수 N(2 ≤ N ≤ 11)κ°€ 주어진닀. λ‘˜μ§Έ μ€„μ—λŠ” A1, A2, ..., AN이 주어진닀. (1 ≤ Ai ≤ 100) μ…‹μ§Έ μ€„μ—λŠ” 합이 N-1인 4개의 μ •μˆ˜κ°€ μ£Όμ–΄μ§€λŠ”λ°, μ°¨λ‘€λŒ€λ‘œ λ§μ…ˆ(+)의 개수, λΊ„μ…ˆ(-)의 개수, κ³±

www.acmicpc.net

πŸ€ 문제

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]++;
        }

    }
}
728x90