알고리즘 문제/[백준]

백준 16637 괄호 추가하기

latter2005 2020. 10. 30. 22:08

문제 주소 : www.acmicpc.net/problem/16637

 

16637번: 괄호 추가하기

길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순

www.acmicpc.net

문제 확인

 

dfs풀이, 연산자 우선순위가 동일 하기 때문에 단순 완전 탐색으로 풀 수 있다.

 

풀이

 

연산자 우선순위가 없기 때문에 현재 식을 계산하면 스텍 top의 값만 변경, 계산하지 않으면 스택에 push 합니다.

괄호 중첩을 빼기 위해 전 단계에서 bool 변수 추가합니다.

 

코드

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
#include <cstdio>
char a[20], o[9];
int N, m = -0x7FFFFFFF, n[10], e = 0;
inline int clc(char o, int x, int y) {
    switch (o) { case '+':return x + y; case '-':return x - y; case '*':return x * y; }
}
void dfs(int c, bool f) {
    if (c == N) {
        int v = n[0];
        for (int i = 0; i < e; i++) v = clc(o[i], v, n[i + 1]);
        if (v > m)m = v;
        return;
    }
    if (f) {
        int t = n[e];
        n[e] = clc(a[c], n[e], a[c + 1- 48);
        dfs(c + 2false);
        n[e] = t;
    }
    o[e] = a[c];
    n[++e] = a[c + 1- 48;
    dfs(c + 2true);
    e--;
}
int main() {
    scanf("%d%s"&N, a);
    n[0= a[0- 48;
    dfs(1true);
    printf("%d", m);
}
cs
반응형

'알고리즘 문제 > [백준]' 카테고리의 다른 글

[백준] 13907 세금  (2) 2020.11.05
[백준] 16235번 나무 재테크  (0) 2020.11.02
백준 15684 사다리조작  (0) 2020.10.30
백준 14500 테트로미오  (0) 2020.10.30
백준 12094: 2048(Hard)  (0) 2020.10.30