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

·2023년 7월 3일
0

프로그래머스

목록 보기
52/59

📌 문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

📌 제한 사항

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

📌 입출력 예

sanswer
"()()"true
"(())()"true
")()("false
"(()("false

📌 코드

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = true;
        Stack<String> stack = new Stack<>();
        if(s.charAt(0)==')') return false;
        for(int i=0; i<s.length(); i++){
            if(s.charAt(i) == '('){
                stack.add(s.substring(i,i+1));
                continue;
            }
            if(s.charAt(i) == ')'){
                if(stack.size() != 0) stack.pop();
            }
        }
        if(stack.size() > 0) answer = false;
        return answer;
    }
}

📌 문제 해결 과정

💡 문자열 s의 첫 번째 문자가 )라면 어차피 올바르지 못한 괄호이니 바로 false를 리턴 해 주도록 하였다

💡 이후 반복문으로 문자열 s의 문자 하나씩 보며 i번째 (라면 스택에 넣어 주고 )라면 스택에 있던 왼쪽 괄호를 pop 시킨다 pop 시킬 때는 stack의 사이즈가 0이 아닐 때만 가능하다

💡 반복문으로 한 문자씩 검사한 후 stack의 크기가 0보다 크다는 것은 pop이 덜 된 괄호 (가 남아 있다는 뜻이며 이는 당연히 올바른 괄호가 될 수 없다는 것을 의미하므로 answer을 false로 바꿔 준다

💡 처음에는 2, 6 번째 테스트 케이스에서 오류가 있었는데 맨 첫 번째 문자가 )일 때 바로 false를 리턴 해 주는 걸 추가해 주니까 해결이 되었고, 또 효율성 검사에서 케이스 2번에서 오류가 있었는데 이는 continue를 추가하니 바로 해결이 되었다 🤔

profile
공부는 많은 양을 하진 않더라도 꾸준히 매일 하기

0개의 댓글