알고리즘/문제 풀이

Programmers - 올바른 괄호

도그rin 2023. 2. 26. 20:52

입력

  • 괄호( ’(’와 ‘)’ )로 이루어진 문자열 s ( s의 길이 ≤ 100,000 )

출력

  • 문자열 s가 올바른 괄호이면 true를, 올바르지 않은 괄호라면 false를 반환

풀이 방법

  • 스택 이용
    1. 문자가 ‘(’이면 스택에 저장
    2. 문자가 ‘)’이면
      1. peek()을 이용하여 스택 상단의 값을 확인했을 때 ‘(’이면 pop()
      2. 스택 상단의 값이 ‘)’이거나 스택이 비어있다면 false를 반환하고, 반복문 빠져나옴
    3. 반복문을 모두 끝낸 뒤 스택이 비어있지 않다면 false를 반환

코드

import java.util.Stack;
class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<Character> stack = new Stack<>();
        
        for(int i=0;i<s.length();i++) {
            char ch=s.charAt(i);
            // '('이면 스택에 저장
            if(ch=='(') {
                stack.push(ch);
            }
            // ')'이면
            else {
                // 스택이 비어있지 않다면
                if(!stack.isEmpty()) {
                    // 스택 상단의 값이 '('이면
                    if(stack.peek()=='(') {
                        // 스택에서 괄호 꺼내기
                        stack.pop();
                        continue;
                    }
                }
                answer=false;
                break;
            }
        }
        
        // 스택이 비어있지 않으면 false 반환
        if(!stack.isEmpty()) {
            answer=false;
        }

        return answer;
    }
}