포스트

[ 프로그래머스 ] 괄호 변환

문제


https://school.programmers.co.kr/learn/courses/30/lessons/60058

풀이


주어진 방식을 구현하여 정답을 구하는 문제로, stack을 활용하여 비교한다.

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <string>
#include <vector>
#include <map>
#include <stack>

using namespace std;

bool isCorrect(string s)
{
    stack<char> check;

    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == '(')
        {
            check.push('(');
        }

        else
        {
            if (!check.empty() && check.top() == '(')
            {
                check.pop();
            }

            else
            {
                check.push('(');
            }
        }

    }

    if (check.empty())
    {
        return true;
    }

    else
    {
        return false;
    }

}

map<char, int> m;

string ParenthesisExchange(string s)
{
    m['('] = 0;
    m[')'] = 0;

    if (s.size() != 0)
    {
        int idx = 0;

        for (; idx < s.size(); idx++)
        {
            m[s[idx]]++;

            if (m['('] == m[')'])
            {
                break;
            }
        }

        string u, v;

        if (m['('] == m[')'])
        {
            u = s.substr(0, idx + 1);
            s.erase(s.begin(), s.begin() + idx + 1);
            v = s;
        }

        bool isRight = isCorrect(u);

        v = ParenthesisExchange(v);

        if (isRight)
        {
            string temp_s;
            temp_s += u;
            temp_s += v;
            s = temp_s;
        }

        else
        {
            string temp_s;

            temp_s += '(';
            temp_s += v;
            temp_s += ')';

            u.erase(u.begin());
            u.erase(u.begin() + u.size() -1, u.end());
            
            for (int i = 0; i < u.size(); i++)
            {
                if (u[i] == '(')
                {
                    temp_s += ')';
                }

                else
                {
                    temp_s += '(';
                }
            }

            s = temp_s;
        }
    }

    return s;
}

string solution(string p) 
{
    string answer = "";

    m.insert({ '(', 0 });
    m.insert({ ')', 0 });
    
    answer = ParenthesisExchange(p);

    return answer;
}

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.