[JAVA 문제 풀이] 389. 괄호 변환

프로그래머스 (60058)
Stupefyee's avatar
Jul 21, 2025
[JAVA 문제 풀이] 389. 괄호 변환
notion image
 

내가 작성한 코드

public class Solution { public String solution(String p) { // 1. 빈 문자열이면 그대로 반환 if (p.isEmpty()) { return ""; } // 2. 균형잡힌 문자열 u, v로 분리 int index = findBalancedIndex(p); String u = p.substring(0, index + 1); String v = p.substring(index + 1); // 3. u가 올바른 문자열이면, v에 재귀 호출 후 u + v 반환 if (isCorrect(u)) { return u + solution(v); } // 4. u가 올바르지 않으면, 변환 규칙 적용 StringBuilder sb = new StringBuilder(); sb.append("("); // 4-1 sb.append(solution(v)); // 4-2 sb.append(")"); // 4-3 sb.append(reverse(u.substring(1, u.length() - 1))); // 4-4 return sb.toString(); // 4-5 } // 균형잡힌 괄호 문자열 분리 지점 찾는 메서드 private int findBalancedIndex(String str) { int count = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == '(') { count++; } else { count--; } if (count == 0) { return i; } } return str.length() - 1; // 균형잡힌 괄호 문자열가 없을 때 } // 올바른 괄호 문자열인지 확인하는 메서드 private boolean isCorrect(String str) { int count = 0; for (char c : str.toCharArray()) { if (c == '(') count++; else { if (count == 0) return false; count--; } } return true; } // 괄호 방향 뒤집는 메서드 private String reverse(String str) { StringBuilder sb = new StringBuilder(); for (char c : str.toCharArray()) { sb.append(c == '(' ? ')' : '('); } return sb.toString(); } }
 
Share article

stupefyee