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