본문 바로가기

Computer Science/알고리즘 문제풀이

Programmers > 연습문제 > #40 올바른 괄호

올바른 괄호

 

문제:https://programmers.co.kr/learn/courses/30/lessons/12909

 

 

 

1. 문제설명

 

올바른 괄호란 두 개의 괄호 '(' 와 ')' 만으로 구성되어 있고, 괄호가 올바르게 짝지어진 문자열입니다. 괄호가 올바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 합니다.

예를들어

 

()() 또는 (())() 는 올바른 괄호입니다.

)()( 또는 (()( 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return하는 solution 함수를 완성해 주세요.

 

 

2. 나의 코드

 

 

- 처음에는 Stack을 이용하여 풀었지만, 이상하게 효율성 테스트를 통과하지 못해서 int open이라는 변수를 썼다.

- 주어진 문자열을 char 배열로 바꾸고 이를 이용하였다.

- 배열의 맨 처음에 ')'가 나오면 무조건 false

- 배열의 맨 마지막에 '('이면 무조건 false이므로 이를 우선적으로 확인한다.

- 위의 두 조건을 무리없이 통과 한다면, for문을 돌려서 '('가 나올경우 open++ ')'가 나올경우 open--을 한다.

- 최종적으로 open이 0이 되면 '('와 ')'가 올바른 괄호라는 뜻이므로 true를 리턴한다. 0이 아니라면 false를 리턴한다.

 

 

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        int open=0;
        char [] sarr = s.toCharArray();
        if(sarr[0] == ')')
            return false;
        else if(sarr[sarr.length-1] == '(')
            return false;
        else{
                for(int i=0;i<sarr.length;i++){
                    if(open < 0)
                        return false;
                    if(sarr[i] == '('){
                        open++;
                    }
                    else{
                        open--;
                    }
                }
            if(open == 0){
                answer = true;
                return answer;
            }
        }
        return answer;
    }
}