-
프로그래머스 - 괄호 변환 [C++]문제 풀이/프로그래머스 2023. 10. 16. 16:16반응형
이 문제는 프로그래머스 Level 2 문제이다. 문제에서 주어진 대로 그대로 구현하면 되는 문제이다. 한 가지 주의할 점은 균형 잡힌 두 개의 문자열로 나누는 부분인데, 처음으로 acc이 0이 되는 i 를 찾아 그 부분을 중점으로 둘로 나누면 된다.
#include <string> #include <vector> #include <stack> using namespace std; bool isCorrect(string str) { stack<char> st; int strSize = str.size(); for (int i = 0; i < strSize; i++) { char c = str[i]; if (st.empty()) { if (c == '(') { st.push(c); } else { return false; } } else { if (c == '(') { st.push(c); } else { if (st.top() == '(') { st.pop(); } else { return false; } } } } if (!st.empty()) { return false; } return true; } string solve(string str) { // 1 if (str.empty()) { return ""; } // 2 int acc; if (str[0] == '(') { acc = 1; } else { acc = -1; } int index; int strSize = str.size(); for (int i = 1; i < strSize; i++) { if (str[i] == '(') { acc++; } else { acc--; } if (acc == 0) { // logic index = i; break; } } string str1 = str.substr(0, index + 1); string str2 = ""; if (index + 1 < strSize) { str2 = str.substr(index + 1); } bool correct1 = isCorrect(str1); // 3, 3-1 if (correct1) { return str1 + solve(str2); } // 4 string result = "("; result += solve(str2); result += ')'; string temp = ""; int str1Size = str1.size(); for (int i = 1; i < str1Size - 1; i++) { if (str1[i] == '(') { temp += ')'; } else { temp += '('; } } result += temp; return result; } string solution(string p) { string answer = ""; if (isCorrect(p)) { return p; } answer = solve(p); return answer; }
반응형'문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 배달 [C++] (2) 2024.01.08 프로그래머스 - 수식 최대화 [C++] (0) 2023.10.16 프로그래머스 - 파괴되지 않은 건물 [C++] (0) 2023.09.10 프로그래머스 - 사칙연산 [C++] (0) 2023.09.09 프로그래머스 - 순위 [C++] (0) 2023.09.08