본문 바로가기

프로그래머스(Java)/Level 2

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

728x90

문제 풀이 힌트

  1. 문제 이해:
    • 주어진 문자열 s가 올바른 괄호 문자열인지 확인하는 문제입니다.
    • 올바른 괄호 문자열이란 모든 괄호가 짝을 이루고, 올바른 순서로 배치된 문자열을 의미합니다.
  2. 자료구조 선택:
    • 이 문제에서는 스택(Stack)을 사용하여 괄호의 짝을 맞추는 작업을 효율적으로 처리할 수 있습니다.
    • 스택은 LIFO(Last In First Out) 자료구조로, 가장 최근에 삽입된 원소가 가장 먼저 제거됩니다.
  3. 알고리즘:
    • 문자열의 각 문자를 순회하면서 스택을 사용하여 괄호를 처리합니다.
    • 여는 괄호 '('는 스택에 넣고, 닫는 괄호 ')'는 스택의 최상단이 여는 괄호 '('인지 확인하여 짝이 맞으면 스택에서 제거합니다.
    • 문자열을 모두 순회한 후 스택이 비어 있으면 모든 괄호가 짝을 이룬 것이고, 비어 있지 않으면 짝이 맞지 않는 괄호가 남아 있다는 의미입니다.
  4. 구현 세부 사항:
    • 문자열 s를 문자 배열로 변환하여 순회합니다.
    • 스택이 비어있지 않은 상태에서 현재 문자가 닫는 괄호 ')'이고 스택의 최상단이 여는 괄호 '('이면 스택에서 제거합니다.
    • 그렇지 않으면 현재 문자를 스택에 추가합니다.
    • 최종적으로 스택이 비어있으면 올바른 괄호 문자열로 판단하여 true를 반환하고, 그렇지 않으면 false를 반환합니다.

 

 


정답은 더보기 클릭

더보기
import java.util.Stack;

class Solution {
    boolean solution(String s) {
        // 스택 선언
        Stack<Character> stack = new Stack<>();
        
        // 문자열의 각 문자를 순회
        for (char c : s.toCharArray()) {
            // 스택이 비어있다면 현재 문자를 추가
            if (stack.isEmpty()) {
                stack.push(c);
                continue;
            }
            
            // 스택의 제일 윗 값이 '('이고 현재 문자가 ')'일 때 스택에서 제거
            if (stack.peek() == '(' && c == ')') {
                stack.pop();
            } else {
                stack.push(c);
            }
        }
        // 스택이 비어있으면 true, 값이 하나 이상 존재하면 false 반환
        return stack.isEmpty();
    }
}
728x90