알고리즘/BaekJoon

백준 14888 : 연산자 끼워넣기

꾸준하게 :) 2020. 2. 20. 18:22

문제 링크입니다 https://www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수이다. 

www.acmicpc.net

입력으로 주어지는 4개의 연산자들을 순서만 바꿔가며 골라, 골라진 연산자들 순서대로 입력으로 주어진 숫자들을 연산한 결과 중 최댓값과 최솟값을 찾는 문제였습니다. 주석 참고해주세요!

 

 

[소스코드]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// [백준] 삼성 SW 역량 테스트 기출 문제 : 연산자 끼워넣기(14888)
 
#include<cstdio>
 
int n, c, num[11], cal[4], result[11], ret_max, ret_min;
 
// result 배열에 0번 인덱스부터 n - 2번 인덱스까지 n - 1개의 연산자를
// 주어진 연산자들 중 골라서 채운 후 연산하여 최대, 최솟값을 구해주는 함수
void getResult(int count) {
    if (count == n - 1) {
        
        int sum = num[0];    // 초기값 첫 번째 숫자
 
        for (int i = 0; i < n - 1; i++) {
            if (result[i] == 0) sum += num[i + 1];             // 0번 연산자 : +
            else if (result[i] == 1) sum -= num[i + 1];        // 1번 연산자 : -
            else if (result[i] == 2) sum *= num[i + 1];        // 2번 연산자 : *
            else if (result[i] == 3) sum /= num[i + 1];        // 3번 연산자 : /
        }
        if (ret_max < sum) ret_max = sum;
        if (ret_min > sum) ret_min = sum;
    }
    else {
        for (int i = 0; i < 4; i++) {
            if (cal[i] > 0) {
                cal[i]--;                // 고른 연산자의 개수를 줄여줌
                result[count] = i;
                getResult(count + 1);
                cal[i]++;                // 다시 늘려줘야 순서를 바꿔가며 고를 수 있음
            }
        }
    }
}
 
int main(void) {
 
    scanf("%d"&n);
    for (int i = 0; i < n; i++scanf("%d"&num[i]);
    for (int i = 0; i < 4; i++scanf("%d"&cal[i]);  // i번 연산자가 cal[i]개가 있다
 
    ret_max = -1000000001;        // -10억이 최댓값이 될 수 있으므로
    ret_min = 1000000001;         // 10억이 최솟값이 될 수 있으므로
    
    getResult(0);
    
    printf("%d\n%d\n", ret_max, ret_min);
 
    return 0;
}
cs

 

'알고리즘 > BaekJoon' 카테고리의 다른 글

백준 13460 : 구슬 탈출 2  (0) 2020.02.21
백준 3190 : 뱀  (0) 2020.02.20
백준 14501 : 퇴사  (0) 2020.02.20
백준 11403 : 경로 찾기  (0) 2020.02.19
백준 1260 : DFS와 BFS  (0) 2020.02.19