728x90
300x250
programmers.co.kr/learn/courses/30/lessons/60058
재귀와 substring의 문제..
처음에 문제 자체가 이해가 안돼서 이해하는데만 10분이 넘게걸렸다..
그냥 이해하려고 하지말고 하라는대로 구현하는게 답인듯.......
import java.util.*;
class Solution {
public static Stack<Character> stack = new Stack<Character>();
public String solution(String p) {
String answer = p;
//올바른 괄호 여부확인
if(!isGood(p)){
//문자열 작업
answer= solve(p);
}
return answer;
}
public boolean isGood(String p){
for(int i = 0; i<p.length();i++) {
Character ch = p.charAt(i);
if(ch=='('){
stack.push('(');
}
else{
if(!stack.isEmpty()){
stack.pop();
}else{
return false;
}
}
}
return true;
}
public String solve(String w){
// System.out.println(w);
if(w.length()==0)
return "";
int left = 0, right= 0;
String u ="";
String v ="";
//u와 v분리
for(int i = 0;i<w.length();i++){
Character ch = w.charAt(i);
if(ch=='('){
left++;
} else {
right++;
}
if(left==right){
u = w.substring(0,i+1);
v = w.substring(i+1,w.length());
break;
}
}
//u가 올바른 문자열인가?
if(!isGood(u)){
//새로운 문자열 만들기..
String str = "";
str="("+solve(v)+")";
// 앞뒤 문자 제거
u = u.substring(1,u.length()-1);
//나머지 문자 괄호방향 뒤집기
u = u.replace("(","*");
u = u.replace(")","(");
u = u.replace("*",")");
return str+u;
}
else {
//v에 대해 재귀수행
return u+solve(v);
}
}
}
728x90
'알고리즘 > 문자열' 카테고리의 다른 글
백준 1543번: 문서 검색 [문자열][브루트포스][Java] (0) | 2023.02.15 |
---|---|
프로그래머스[Level2] - [3차] 압축 [문자열][재귀][2018 KAKAO BLIND RECRUITMENT] - Java (0) | 2020.09.12 |
프로그래머스[Level2] - 오픈채팅방 [문자열][2019 KAKAO BLIND RECRUITMENT] - Java (0) | 2020.09.11 |
프로그래머스[Level2] - 튜플 [문자열][2019 카카오 개발자 겨울 인턴십] - Java (0) | 2020.09.11 |
프로그래머스[Level2] - 문자열 압축 [2020 KAKAO BLIND RECRUITMENT] (0) | 2020.08.29 |