짱아의 개발 기록장

백준 16637번. 괄호 추가하기(c++) / 문자열 처리 본문

Algorithm/Baekjoon

백준 16637번. 괄호 추가하기(c++) / 문자열 처리

jungahshin 2020. 8. 6. 11:32
반응형

카카오에서 나올 법한 문자열 처리 문제였다.

숫자를 기준(idx)으로 idx+2값이 전체 문자 전체의 길이에 벗어나지 않는다면, 괄호를 추가하거나 추가하지 않는다.

 

1) 괄호를 추가한다면, idx(숫자), idx+1(연산자), idx+2(숫자) 값을 계산해준 다음 그 전까지의 총합과 계산하여 넘겨주었다.

그리고 다음 idx값은 idx+4가 된다.

2) 괄호를 추가하지 않는다면, 그 전까지의 총합과 지금 값을 연산해주고 다음 숫자로 넘어간다.

 

코드를 보면 더 이해가 잘 될 것이다.

 

코드 첨부

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
50
51
52
53
54
55
56
57
58
59
// 괄호 추가하기
#include <iostream>
#include <vector>
#include <stack>
#include<climits>
using namespace std;
 
int n;
string s;
int final = INT_MIN;
 
int cal(int a, int b, char oper)
{
    int result = a;
    if(oper=='+'){
        result += b;
    }else if(oper=='*'){
        result *= b;
    }else{
        result -= b;
    }
 
    return result;
}
 
 
void dfs(int idx, int total){
    if(idx>s.size()-1){ // 종료
        // 최대값 갱신
        final = max(final, total);
        return;
    }
 
    char oper;
    if(idx==0){
        oper = '+';
    }else{
        oper = s[idx-1];
    }
 
    // 괄호 추가하기
    if(idx+2<s.size()){
        int temp = cal(s[idx]-'0', s[idx+2]-'0', s[idx+1]);
        dfs(idx+4, cal(total, temp, oper));
    }
 
    // 괄호 추가 안한다.
    dfs(idx+2, cal(total, s[idx]-'0', oper));
}
 
int main()
{
    cin>>n;
    cin>>s;
 
    dfs(00);
    cout<<final<<"\n";
    return 0;
}
cs

 

 

 

문제 첨부

https://www.acmicpc.net/problem/16637

 

16637번: 괄호 추가하기

첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가

www.acmicpc.net

 

github 첨부

https://github.com/jungahshin/algorithm/blob/master/c:c%2B%2B/16637_review.cpp

 

jungahshin/algorithm

algorithm study. Contribute to jungahshin/algorithm development by creating an account on GitHub.

github.com

 

반응형
Comments