티스토리 뷰

이 문제는 카카오 코딩테스트중 쉬운문제에 속하는 편.

하지만 나에게는 생각보다 어려웠다 ㅠㅠ

 

-프로그래머스 문제

https://programmers.co.kr/learn/courses/30/lessons/60058

 

public static String Solution(String p) {
		
		//p=")("; 테스트
		String answer="";
		if(p.equals("")){
			return answer;
		}
		answer = separate(p);
        return answer;
	}
    //u와 v를 분리
	public static String separate(String s){
		String u="";
		String v="";
		String result="";
		int left=0;
		int right=0;
		if(s.isEmpty()) return result;
		
		for(int i=0;i<s.length();i++){
			if(s.charAt(i)=='('){
				left++;
			}
			else if(s.charAt(i)==')')
				right++;
			if(left==right){
				for(int j=0;j<s.length();j++){
					if(j<=i)
						u+=s.charAt(j);
					else
						v+=s.charAt(j);
					
				}
//				System.out.printf("u=%s,v=%s%n",u,v);
//u가 올바른괄호일경우 결과에 붙임
//v는 재귀함수를 통해 다시 분리하는과정 수행
				if(check(u))
					result = u+separate(v);
				else{
					if(!v.equals(""))
						v=separate(v);
					result = correct(u,v);
				}
				break;	
			}
				
		}
		
		return result;
	}
   //올바른 괄호로 변환해주는 함수
	public static String correct(String u, String v){
		String result="";
		result+="(";
		result+=v;
		result+=")";
		u = u.substring(1, u.length()-1);
		String[] str = u.split("");
		for(int i=0;i<str.length;i++){
			if(str[i].equals("(")){
				str[i] = ")";
			}else if(str[i].equals(")"))
				str[i]="(";
		}
		StringBuilder builder = new StringBuilder();
		for(String s : str) {
		    builder.append(s);
		}
		u = builder.toString();
		result+=u;
		
		return result;
	}
    //올바른 괄호인지 확인해주는 함수
	public static boolean check(String s){
		Stack<Character> st = new Stack<>();
		boolean ans = true;
	
			for(int i=0;i<s.length();i++){
				if(s.charAt(i)=='('){
					st.push(s.charAt(i));
				}else if(!st.isEmpty()){
					st.pop();
				}else{
					ans = false;
					break;
				}
			}
			
		
		if(!st.isEmpty()) ans = false;
		return ans;
	}

 

공부할겸 차근차근 풀어보는중..

내가짠 코드는 항상 더럽.. 좀 더 클린코드 짜는 연습을 해야겠다!

코딩은 항상 어렵다.....

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함