Notice
Recent Posts
Recent Comments
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

코린이 탈출기

[2020 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 괄호 변환 본문

문제 풀이

[2020 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 괄호 변환

명란파스타 2020. 8. 28. 01:55

문제 풀어보기

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴�

programmers.co.kr

 

이 문제도 구냥 구현 문제.

2번까지는 무난한듯 !

3번부터 오지게 헤맸다지요 ...

 

문제 설명에 구현방법이 순서대로 아주 잘 나와있다.

그대로 코드로 옮기기만 하면 된다.

이것도 문자열을 자르고 붙이고 해야돼서 자바스크립트로 풀어보았다.

 

이 문제는 설명할 게 딱히 없다. 정말 그대로 옮겨놓은게 다라스...

아! 올바른 괄호 문자열인지 확인할 때 stack의 성질을 이용하였다 !

 

 

-전체 코드-

<!DOCTYPE html>
<html>
<script>
    var p = "(()())()";

    function split_w(w) {
        var left_cnt = 0;
        var right_cnt = 0;

        for (var i = 0; i < w.length; i++) {
            if (w[i] == ")") {
                right_cnt++;
            }
            else
                left_cnt++;

            if (right_cnt == left_cnt)
                return i;
        }
    }

    function isCorrect(w) {
        var stack = new Array();
        for (var i = 0; i < w.length; i++) {
            if (w[i] == ")") {
                if (stack.length == 0)
                    return false;
                stack.pop();
            }
            else
                stack.push(1);
        }
        if (stack.length == 0)
            return true;
        else
            return false;
    }

    function convert(w) {
        var new_w = "";
        for (var i = 0; i < w.length; i++) {
            if (w[i] == ")")
                new_w += "(";
            else
                new_w += ")";
        }

        return new_w;
    }

    function recursion(p) {
        if (p == "")
            return "";
        else {
            var split = split_w(p);
            var u = p.substring(0, split + 1);
            var v = p.substring(split + 1, p.length);

            if (isCorrect(u)) {
                return u + recursion(v);
            }
            else {
                var new_string = "";
                new_string += "(";
                new_string += recursion(v);
                new_string += ")";

                var edit_u = u.substring(1, u.length - 1);
                new_string += convert(edit_u);
                return new_string;
            }
        }
    }
    function solution(p) {
        var answer = '';

        answer = recursion(p);
        console.log(answer);
        return answer;

    }

    solution(p);
</script>

</html>