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

1 분 소요

문제

문제 링크 : 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;
			}
		}
    }
}





느낀점

끝까지 문제 이해하는게 너무 어려웠다.
결국 풀지 못 해서 다른 사람의 코드를 보았는데, 그래도 이해가 되지않아가지고 문제의 설명을 하나하나 읽으면서 코드에 대입해보니까 이제야 좀 이해가 되는거같다. 역시 카카오인가 -.-