programmers_괄호 변환_java
2023. 4. 22. 12:11ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public String solution(String p) {
String answer = "";
answer = step(p);
return answer;
}
public String step(String p){
if(step1(p)){ // 빈 문자열 일경우
return "";
}else{
String[] str = step2(p); // u, v 분리
if(step3(str[0])){ // u가 올바른 문자열
return str[0] + step(str[1]); // v를 1단계부터 실행
}else{
StringBuilder sb = new StringBuilder();
sb.append("("); // 4-1 빈 문자열에 ( 추가
sb.append(step(str[1])); // 4-2 v에 대해 수행 결과 추가
sb.append(")"); //4-3 ) 추가
sb.append(step4_4(str[0])); // 4-4 양쪽 끝 제거 후 문자열 괄호 역전
return sb.toString();
}
}
}
// 1. 입력이 빈 문자열인경우, 빈 문자열을 반환합니다.
public boolean step1(String s){
if(s.equals("")){
return true;
}else{
return false;
}
}
//2 문자열 w를 두 균형 잡힌 괄호 문자열로 분리합니다.
public String[] step2(String s){
int open = 0, close = 0;
String[] res = new String[2];
StringBuilder sb = new StringBuilder();
for(int i = 0; i< s.length(); i++){
char c = s.charAt(i);
sb.append(c);
if(c == '('){
open++;
}else if(c==')'){
close++;
}
if(open == close){
String u = sb.toString();
String v = "";
if(i+1 < s.length()){
v = s.substring(i+1);
}
res[0] = u;
res[1] = v;
return res;
}
}
return res;
}
// 3.문자열 u가 올바른 괄호 문자열 이라면
public boolean step3(String s){
Stack<Character> stack = new Stack<>();
for(int i = 0; i<s.length(); i++){
char c = s.charAt(i);
if(c == '('){
stack.push('(');
}else if(c==')'){
if(stack.isEmpty()){
return false;
}else{
stack.pop();
}
}
}
if(stack.isEmpty()){
return true;
}else {
return false;
}
}
// 4-4 첫번째와 마지막 문자 제거 후 나머지 괄호 역전
public String step4_4(String s){
StringBuilder sb = new StringBuilder();
for(int i = 1; i<s.length()-1; i++){
char c = s.charAt(i);
if(c=='('){
sb.append(")");
}else if(c == ')'){
sb.append("(");
}
}
return sb.toString();
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_[3차] 방금그곡_java (0) | 2023.04.26 |
---|---|
programmers_행렬 테두리 회전하기_java (0) | 2023.04.22 |
programmers_택배상자_java (0) | 2023.04.17 |
programmers_두 큐 합 같게 만들기_java (0) | 2023.04.17 |
programmers_메뉴 리뉴얼_java (0) | 2023.04.17 |