[프로그래머스] 괄호변환
문제
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/60058
코드
function solution(p) {
let answer = "";
let cnt = 0;
let check = false;
//1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다.
if (p.length == 0) {
return ""
}
//2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다.
for (let i = 0; i < p.length; i++) {
if (p[i] == '(') cnt++;
if (p[i] == ')') cnt--;
// cnt 가 마이너스일때(')' 가 먼저나왔을때) 올바른괄호 문자열이 아님
if (cnt < 0) check = true;
//균형잡히 괄호문자열 u , v 로 분리
if (cnt === 0) {
//4. 올바른 괄호 문자열이 아닐때
if (c0heck == true) {
//4-1. 빈 문자열에 '(' 를 붙임
answer += '(';
//4-2. 문자열 v 를 재귀수행한 결과를 이어붙임
answer += solution(p.slice(i + 1, p.length));
//4-3. ')' 를 다시 붙임
answer += ')';
//4-4. u 의 첫번째,마지막 문자를 제거하고 나머지 문자열의 괄호 방향을 뒤집어서 이어붙임
for (let j = 1; j < i; j++) {
if (p[j] == ')') answer += '(';
if (p[j] == '(') answer += ')';
}
//4-5. 생성된 문자열을 반환
return answer;
}
//3. 올바른 괄호 문자열일때
else {
// answer 에 u 를 할당하고
answer += p.slice(0, i + 1);
//3-1. 문자열 v 에 대해 1단계부터 다시 수행함(재귀호출)
answer += solution(p.slice(i + 1, p.length));
return answer;
}
}
}
}
느낀점
끝까지 문제 이해하는게 너무 어려웠다.
결국 풀지 못 해서 다른 사람의 코드를 보았는데, 그래도 이해가 되지않아가지고 문제의 설명을 하나하나 읽으면서 코드에 대입해보니까 이제야 좀 이해가 되는거같다. 역시 카카오인가 -.-