상세 컨텐츠

본문 제목

괄호 변환 (2020 KAKAO BLIND RECRUITMENT)

프로그래머스 코딩테스트 풀이

by 발발개발 2022. 7. 4. 15:21

본문

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

 

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

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

programmers.co.kr

 

풀이

class Solution {
    public String solution(String p) {
        return fn(p);
    }

    public String fn (String str) {
        if (str.isEmpty()) {
            return "";
        }

        String[] arr = balance(str);
        String u = arr[0];
        String v = arr[1];

        if (isComplete(u)) {
            return u + fn(v);
        } else {
            StringBuilder sb = new StringBuilder();
            sb.append("(");
            sb.append(fn(v));
            sb.append(")");

            u = u.substring(1, u.length() - 1);

            for (char chu : u.toCharArray()) {
                if (chu == '(') {
                    sb.append(")");
                } else {
                    sb.append("(");
                }
            }

            return sb.toString();
        }
    }

    public String[] balance(String str) {
        int cnt = 0;
        boolean flag = true;
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();

        for (char ch : str.toCharArray()) {
            if (ch == str.charAt(0)) {
                cnt++;
            } else {
                cnt--;
            }

            if (flag) {
                sb1.append(ch);
            } else {
                sb2.append(ch);
            }

            if (flag && cnt == 0) {
                flag = false;
            }
        }

        return new String[]{sb1.toString(), sb2.toString()};
    }

    public boolean isComplete(String str) {
        int cnt = 0;

        for (char ch : str.toCharArray()) {
            if (ch == '(') {
                cnt++;
            } else {
                cnt--;
            }

            if (cnt < 0) {
                return false;
            }
        }

        return true;
    }
}

관련글 더보기

댓글 영역