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

풀고 느낀점
일단 문제에 대한 이해가 잘 안갔습니다. 결론은 문제 설명에서 주어진 내용을 그대로 구현하면 되는 거였는데, 뭔가 트릭일 수 있다는 생각이 들었습니다. 최근에 백준저지에서 문제에 있는 설명 그대로 코드를 구현했는데, 답은 제대로 나왔는데 Timeout 걸리는 예제들이 있었습니다. 이 문제도 그런 트릭이 있을 것이다라고 생각했습니다. 그런데 전혀 아니였네요....😭
문제에 대한 설명대로만 푼다면 한 20분정도(?) 걸렸던것 같습니다. 갠히 예제를 보면서 이해하려고 시간을 많이 버렸네요. 카카오 코테를 볼 때, 이런 유형인 경우 그냥 무조건 문제에 있는 설명대로 구현하기로 합시다!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} | |
} |
'Study with book > Algorithms' 카테고리의 다른 글
[프로그래머스] 영어 끝말잇기(0) | 2021.04.02 |
---|---|
[프로그래머스] 해시 > 위장(0) | 2021.03.30 |
[2020 카카오 블라인드 온라인 코딩 테스트] 문자열 압축(0) | 2021.03.30 |
[2019 카카오 블라인드 온라인 코딩 테스트] 후보키(0) | 2021.03.30 |
[카카오 코드 페스티벌 2018 예선] 인형들(2) | 2020.10.18 |