Study with book/Algorithms

[2020 카카오 블라인드 온라인 코딩 테스트] 괄호 변환


 

 

[괄호 변환] programmers.co.kr/learn/courses/30/lessons/60058

 

 

풀고 느낀점

일단 문제에 대한 이해가 잘 안갔습니다. 결론은 문제 설명에서 주어진 내용을 그대로 구현하면 되는 거였는데, 뭔가 트릭일 수 있다는 생각이 들었습니다. 최근에 백준저지에서 문제에 있는 설명 그대로 코드를 구현했는데, 답은 제대로 나왔는데 Timeout 걸리는 예제들이 있었습니다. 이 문제도 그런 트릭이 있을 것이다라고 생각했습니다. 그런데 전혀 아니였네요....😭

 

문제에 대한 설명대로만 푼다면 한 20분정도(?) 걸렸던것 같습니다. 갠히 예제를 보면서 이해하려고 시간을 많이 버렸네요. 카카오 코테를 볼 때, 이런 유형인 경우 그냥 무조건 문제에 있는 설명대로 구현하기로 합시다!

package algorithms.online.kakao.year2020.problem2;
import java.util.Stack;
public class Problem2 {
public static void main(String[] args) {
Problem2 problem2 = new Problem2();
System.out.println(problem2.solution("(()())()"));
System.out.println(problem2.solution(")("));
System.out.println(problem2.solution("()))((()"));
}
int idx;
public boolean isCorrectedString(String p) {
boolean result = true;
Stack<Character> stack = new Stack<>();
int open = 0;
int close = 0;
for (int i = 0; i < p.length(); i++) {
char ch = p.charAt(i);
if (ch == '(') {
open++;
stack.push(ch);
} else {
close++;
if (!stack.isEmpty()) {
stack.pop();
} else {
result = false;
}
}
if (open == close) {
idx = i + 1;
return result;
}
}
return result;
}
public String solution(String p) {
if (p.isEmpty()) {
return p;
}
boolean isCorrectedString = isCorrectedString(p);
String u = p.substring(0, idx);
String v = p.substring(idx);
StringBuilder emptyString = new StringBuilder();
if (isCorrectedString) {
String result = solution(v);
return u + result;
} else {
emptyString.append("(").append(solution(v)).append(")");
String calString = u.substring(1, u.length() - 1);
for (int i = 0 ; i < calString.length() ; i++) {
if (calString.charAt(i) == '(') {
emptyString.append(")");
} else {
emptyString.append("(");
}
}
return emptyString.toString();
}
}
}
view raw ChageText.java hosted with ❤ by GitHub