프로그래머스/레벨2

[JAVA] 프로그래머스 레벨2_올바른 괄호😀

박차 2023. 1. 28. 22:55
내 문제 코드 1
    boolean solution(String s) {
    	boolean answer = true;
        String[] str = s.split("");
        int left = 0;
        int right = 0;
        
        if(str[0].equals(")")){
        	return false;
        }else {
        	for(int i = 0 ; i<s.length();i++) {
        		if(str[i].equals("(")) {
        			left++;
        		}else {
        			right++;
        		}
        	}
        }
        return answer = (left==right) ? true : false;
    }

1. 첫번째가 ")"라면 false

2. "("와 ")"의 수가 값은 true

 

음..

스택으로 풀어볼까..

 

내 문제 코드 2
        boolean solution(String s) {
		boolean answer = true;
		String[] str = s.split("");
		Stack<String> stack = new Stack<String>();

		for (int i = 0; i < s.length(); i++) {
			if (str[i].equals("(")) {
				stack.push("(");
			} else {
                if(stack.empty()) {
					return false;
				}
				stack.pop();
			}
		}

		return answer = (stack.empty()) ? true : false;
	}

음..

아까보다는 나은데.. 효율성 실패

 

내 성공 코드
	boolean solution(String s) {
        boolean answer = true;
        Stack<String> stack = new Stack<String>();

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                stack.push("(");
            } else {
                if(stack.empty()) {
                    return false;
                }
                stack.pop();
            }
        }
        return answer = (stack.empty()) ? true : false;
    }

1. s.split대신 charAt으로 효율성 높임 

2. stack이 비어있으면(괄호가 올바르면) true 아님 false

 

 

다른 사람 코드
boolean solution(String s) {
        boolean answer = false;
        int count = 0;
        for(int i = 0; i<s.length();i++){
            if(s.charAt(i) == '('){
                count++;
            }
            if(s.charAt(i) == ')'){
                count--;
            }
            if(count < 0){
                break;
            }
        }
        if(count == 0){
            answer = true;
        }

        return answer;
    }

1. '(' 면 더하고 ')'면 빼기

2. count가 0보다 크면 false 같으면 true

 

힘내자잇!