티스토리 뷰

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/60058?language=java# 

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

 

2. 풀이

  • 재귀적으로 과정을 반복해야하므로, 과정 자체를 별도의 함수(solve)에서 수행한다.
  • 균형 잡힌 문자열을 확인하는 함수인 isBalanced, 올바른 문자열을 확인하는 함수인 isRight를 구현한다.
  • 나머지는 문제의 조건에 맞게 구현한다.

 

3. 코드

 
import java.util.*;

class Solution {
    
    // 균형잡힌 문자열 확인
    private boolean isBalanced(String s){
        int diffCnt = 0;
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) == '(') diffCnt++;
            else diffCnt--;
        }
        
        return diffCnt == 0 ? true: false;
    }
    
    // 올바른 문자열 확인
    private boolean isRight(String s){
        
        int upCnt = 0;
        
        for(int i = 0; i < s.length(); i++){
            
            if(s.charAt(i) == ')'){
                upCnt--;
            }else{
                upCnt++;
            }
            if(upCnt < 0) return false;
        }
        return upCnt == 0 ? true : false;
    }
    
    public String solve(String p){
        String u = "";
        String v = "";
        String answer = "";
        
        if(p == "") return ""; // ... (1)
        
        for(int i = 1; i <= p.length(); i++){  // ... (2)
            u = p.substring(0, i);
            
            if(isBalanced(u)){
                v = p.substring(i, p.length());
                break;
            }
        }
        
        if(isRight(u)){ // ... (3)
            answer = u + solve(v);  // ... (3)-1
        }else{ // ... (4)
            answer = "(" + solve(v) + ")";  // ...(4)-1,2,3
            for(int i = 1; i < u.length() - 1; i++){ // ...(4)-4
                if(u.charAt(i) == ')') answer += "(";
                else answer += ")";
            }
        }
        
        return answer;
    }
    
    public String solution(String p) {
        
        if(isRight(p)) 
            return p;
        else
            return solve(p);

    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함