코딩 테스트(Coding Test)/프로그래머스

[프로그래머스] 올바른 괄호 - 자바(Java)

잇트루 2023. 8. 14. 00:09
반응형

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr



문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

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

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

 

 

제한사항

  • 자열 s의 길이 : 100,000 이하의 자연수
  • 자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.



입출력 예

S answer
"()()" true
"(())()" true
")()(" false
"(()(" false

 

 

입출력 예 설명

입출력 예 #1, 2, 3, 4

문제의 예시와 같습니다.

 

 

코드

import java.util.Stack;

class Solution {
    boolean solution(String s) {
        // stack 선언
        Stack<Character> stack = new Stack<>();

        // String 순회
        for (int i = 0; i < s.length(); i++) {
            // 스택이 비어있지 않으면서 i번째 문자가 ) 이면 스택에서 값 빼기
            if (!stack.empty() && s.charAt(i) == ')') {
                stack.pop();
            // 이 외의 경우 스택에 담기
            } else {
                stack.push(s.charAt(i));
            }
        }

        return stack.isEmpty();
    }
}

코드 설명

주석 참고

  • 이 문제는 주어진 문자열 s가 올바른 괄호로 구성된 문자열인지 판단하는 문제다.
  • 문자열 s를 순회하여 현재 문자가 여는 괄호('(')면 stack에 push하고, 닫는 괄호(')')면 pop한다.
  • for 문이 끝난 후 isEmpty() 메서드를 통해 스택이 비어있는지 판단한다.
반응형