곽로그
[프로그래머스 level2] 괄호변환 본문
반응형
문제
programmers.co.kr/learn/courses/30/lessons/60058
풀이
문제그대로!
코드
/*
1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다.
2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다.
3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다.
3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다.
4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다.
4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다.
4-2. 문자열 v에 대해 1단계부터 재귀적으로 수행한 결과 문자열을 이어 붙입니다.
4-3. ')'를 다시 붙입니다.
4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.
4-5. 생성된 문자열을 반환합니다.
*/
import java.util.Stack;
class Solution {
public String solution(String p) {
String answer = func(p);
return answer;
}
static String func(String w){
if(w.equals("")){
return "";
}
else{
int index = getUV(w);
String u = w.substring(0,index);
String v = w.substring(index, w.length());
if(isRight(u)){
return u+func(v);
}
else{
return "("+func(v)+")"+converse(u);
}
}
}
static int getUV(String w){
int leftCount = 0;
int rightCount =0;
int boundary =0;
for(int index =0; index<w.length();index++){
if(w.charAt(index)=='('){
++leftCount;
}
else{
++rightCount;
}
if(leftCount==rightCount){
boundary= index;
break;
}
}
return boundary+1;
}
static boolean isRight(String u){
Stack<Character> stack = new Stack<>();
for(int index =0; index<u.length();index++){
if(u.charAt(index)=='('){
stack.push('(');
}
else{
if(stack.isEmpty()){
return false;
}
else if(stack.peek()==')'){
return false;
}
else{
stack.pop();
}
}
}
return stack.isEmpty();
}
static String converse(String u){
String cut = "";
if(u.length()<=2){
return "";
}
else{
cut = u.substring(1,u.length()-1);
StringBuilder inverse =new StringBuilder();
for(int index =0; index<cut.length();index++){
if(cut.charAt(index)=='('){
inverse.append(")");
}
else{
inverse.append("(");
}
}
return inverse.toString();
}
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스, python] 개인정보 수집 유효기간 (+반례) (0) | 2023.05.29 |
---|---|
[프로그래머스, level2] 삼각 달팽이 (0) | 2021.01.17 |
[프로그래머스 level2] 다리를 지나는 트럭 (0) | 2021.01.11 |
[프로그래머스 level2] 카카오프렌즈 컬러링북 (0) | 2020.12.18 |
[프로그래머스 level2] 기능개발 (0) | 2020.12.03 |
Comments