[프로그래머스] 올바른 괄호

fsm12·2023년 7월 26일
0

프로그래머스

목록 보기
49/57
post-thumbnail

문제링크

문제 이해

[ 입력형태 / 조건 ]

s
문자열 | "(())()" | s의 길이는 100,000 이하의 자연수, 소괄호로만 이루어져 있음

[ 문제 ]

올바른 괄호 형태이면 true를 return
(열린괄호가 있다면 닫힌괄호가 존재해야하고, 쌍이 적절하게 맺어져야 함)

[ 풀이 ]

스택을 이용해서 열린괄호는 그대로 넣어주고, 닫힌 괄호는 앞에 열린 괄호가 있다면 삭제함. 만약에 열린 괄호가 이전에 없었다면 괄호에 쌍이 맞게 된 것이 아님. 그리고, 전체를 순회한 후에 스택에 남은 값이 있는 경우 또한 열린 괄호가 닫힌 괄호보다 더 많은 경우이므로 false를 반환해야한다.




코드

> [성공] 1차 시도 : 구현

  • 생각한 풀이 그대로 구현
class Solution {
    boolean solution(String s) {
        boolean answer = true;
        
        int N = s.length(), p=0;
        char[] stack = new char[N];
        
        for(char c : s.toCharArray()){
            if(c == ')'){
                if(p!=0 && stack[p-1] == '('){
                    p-=1;
                    continue;
                }else{
                    answer = false;
                    break;
                }
            }
            stack[p++] = c;
        }
        return p==0 && answer?true:false;
    }
}



Tip : 스택에 넣고 값을 비교할때는 해당 스택의 조건만 따지는 것이 아니라, 실행이 끝난 후에 스택에 남은 값도 생각해보아야 한다.

0개의 댓글