• Home
  • About
    • Ryureka Moment photo

      Ryureka

      Sin Prisa, Sin Pausa

    • About Me
    • Facebook
    • Github
    • Youtube
  • Projects
  • Posts
    • Posts
    • ProblemSolvings
    • Tags
    • Blog
    • TIL
    • Examples
  • ProblemSolving
    • ProblemSolving
    • BOJ
    • Programmers
    • SWEA
    • LeetCode
  • FrontEnd
    • FrontEnd
    • HTML
  • BackEnd
    • BackEnd
    • Server
      • Server
      • Spring
      • NodeJS
    • DataBase
      • DataBase
      • MySQL
      • MongoDB
  • Programming
    • Programming
    • Java
    • Javascript
    • Python
    • CleanCode
  • ComputerScience
    • DataStructure
    • Algorithm

[Programmers] 괄호 변환

22 Jun 2022

Reading time ~1 minute

  • 풀이 구현
해당 문제는 프로그래머스 괄호 변환에서 풀어보실 수 있습니다.

풀이 구현

import java.util.Stack;

class Solution {
   public String solution(String p) {
        String answer = solve(p);                
        return answer;
    }
    
    String solve(String str) {
    	if(str.equals("")) return "";
    	int divideIndex = divide(str);
    	String u = str.substring(0, divideIndex);
    	String v = str.substring(divideIndex);
    	    	
    	if(isOk(u)) return u + solve(v);
    	
    	String result = "(";
    	result = result + solve(v);
    	result = result + ")";
    	result = result + reverse(u);
    		
    	return result;
    }
    
    String reverse(String str) {
    	char[] charArr = str.toCharArray();
    	StringBuilder sb = new StringBuilder();
    	for(int i = 1; i < charArr.length - 1; i++) {
    		if(charArr[i] == '(') sb.append(")");
    		else if(charArr[i] == ')') sb.append("(");
    	}
    	return sb.toString();
    }
    
    int divide(String str) {
    	char[] charArr = str.toCharArray();
    	for(int i = 1; i <= charArr.length; i++) {
    		if(isBalenced(str.substring(0, i))) return i;
    	}
    	return -1;
    }
    
    boolean isBalenced(String str) {
    	char[] charArr = str.toCharArray();
    	int cnt1 = 0;
    	int cnt2 = 0;
    	for(int i = 0; i < charArr.length; i++) {
    		if(charArr[i] == '(') cnt1 ++;
    		else if(charArr[i] == ')') cnt2++;    		
    	}
    	return cnt1 == cnt2;    	
    }
    
    boolean isOk(String str) {
    	char[] charArr = str.toCharArray();
    	Stack<Character> stack = new Stack<>();
    	
    	for(int i = 0; i < charArr.length; i++) {
    		if(charArr[i] == '(') stack.push(charArr[i]);
    		else if(charArr[i] == ')') {
    			if(!stack.isEmpty()) stack.pop();
    			else return false;
    		}
    	}
    	
    	return stack.isEmpty();
    }
}


Share