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

유존돌돌이·2021년 10월 21일
0

Programmers

목록 보기
81/167
post-thumbnail

문제 설명

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다.
수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다.

Code

import java.util.*;
class Solution {
    public String solution(String p) {
        int o=0, i=0;
        while(i<p.length()) {
            char c = p.charAt(i++);
            if(c=='(') o++;
            else o--;
            if(o==0) break;
        }
        if(o!=0 || p.equals("")) return p;
        String u = p.substring(0, i);
        String v = p.substring(i, p.length());
        if(!ynCorrect(u)) {
            StringBuilder sb = new StringBuilder();
            sb.append('(');
            sb.append(solution(v));
            sb.append(')');
            return sb.append(reverseString(u)).toString();
        } 
        return u+solution(v);
    }

    public String reverseString(String u) {
        StringBuilder sb = new StringBuilder();
        for(int i=1 ; i<u.length()-1 ; i++) {
            char c = u.charAt(i);
            if(c=='(') sb.append(')');
            else sb.append('(');
        }
        return sb.toString();
    }

    public boolean ynCorrect(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i=0 ; i<s.length() ; i++) {
            char c = s.charAt(i);
            if(c==')') {
                if(stack.isEmpty() || stack.pop()!='(') return false;
            } else {
                stack.push('(');
            }
        }
        return stack.isEmpty();
    }
}

Comment

개인적으로는 문제 설명이 너무 불친절한것같다.

0개의 댓글