Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Tags more
Archives
Today
Total
관리 메뉴

개발자 일기장.

백준 14888. 연산자 끼워넣기 본문

취업/Algorithm.

백준 14888. 연산자 끼워넣기

Azderica 2020. 5. 2. 00:26

14888 연산자 끼워넣기

문제 알고리즘

  • 순열문제

풀이방법

  • 덧셈, 뺄셈, 곱셈, 나눗셈의 횟수를 받아 이를 vector형태로 바꾼다.
  • 순열을 돌리면서 최대값과 최소값을 계산한다.
  • 핵심 코드
#include    <iostream>
#include    <vector>
#include    <algorithm>
#include <limits.h>
using namespace std;

// static
const int MAX = 11;

// variable
int N;
int numList[MAX], signCount[4];
vector<int> signList;
int max_num = INT_MIN, min_num = INT_MAX;

void solution( ) {
    do {
        int sum = numList[0];
        for (int i = 0; i < signList.size(); i++) {
            switch (signList[i])
            {
            case 0:
                sum += numList[i + 1];
                break;
            case 1:
                sum -= numList[i + 1];
                break;
            case 2:
                sum *= numList[i + 1];
                break;
            case 3:
                sum /= numList[i + 1];
                break;
            }
        }

        if (sum > max_num)
            max_num = sum;
        if (sum < min_num)
            min_num = sum;

    } while (next_permutation(signList.begin(), signList.end()));
}

int main() {
    // input
    cin >> N;
    for (int i = 0; i < N; i++)
        scanf("%d", &numList[i]);
    for (int i = 0; i < 4; i++)
        scanf("%d", &signCount[i]);

    // solution
    for (int i = 0; i < 4; i++) 
        for (int j = 0; j < signCount[i]; j++)
            signList.push_back(i);

    solution();

    // output
    cout << max_num << "\n" << min_num << "\n";

    return 0;
}

문제 후 느낀점

  • 쉬운 순열문제.

'취업 > Algorithm.' 카테고리의 다른 글

백준 1260. DFS, BFS  (0) 2020.05.30
[2020 KAKAO BLIND RECRUITMENT] 외벽 점검  (0) 2020.05.02
백준 2573. 빙산  (0) 2020.05.01
[2020카카오공채] 괄호 변환  (0) 2020.04.11
백준 17837. 새로운 게임2  (0) 2020.04.11