[코테 스터디 8일차 TIL] 올바른 괄호

dev_jubby·2024년 7월 29일
1

코테스터디

목록 보기
8/36



💛 오늘의 학습 키워드

[스택/큐] 올바른 괄호



📝 문제

문제 설명

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

제한 조건

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

입출력 예

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



💬 내 풀이

class Solution {
    boolean solution(String s) {
        int result = 0;

        for(int i=0; i<s.length(); i++) {
            if (result==0) {
                if(s.charAt(i)=='(') {
                    result++;
                }else {
                    return false;
                }
            }else if(0 < result){
                if(s.charAt(i)=='('){
                    result++;
                }else {
                    result--;
                }
            }else {
                return false;
            }
        }

        return result==0 ? true : false; 
    }
}

💻 내 접근 방법

  1. 스택을 사용하지 않고 for() 반복문을 사용해서 int에 값을 넣었다가 빼는 행위를 반복했다.
  2. 설명할 게 없는... 너무 직관적인 코드...


✨ 다른 사람 풀이

import java.util.*;  
  
class Solution {  
  
    boolean solution(String s) {  
        Stack<Character> stack = new Stack<>();  
        for (int i = 0; i < s.length(); i++) {  
            if (s.charAt(i) == '(') {  
                stack.push('(');  
            } else if (s.charAt(i) == ')') {  
                if (stack.isEmpty()) {  
                    return false;  
                }  
                stack.pop();  
            }  
        }  
        return stack.isEmpty();  
    }  
}
  1. stack을 사용해서 푼 코드를 가져왔다. Stack 객체를 생성해주고,
  2. 마찬가지로 for()문을 실행한 후 로직은 동일하게 진행된다.
  3. 만약 '(' 문자라면 push() 메소드를 통해 stack에 쌓고, ')' 문자라면 stack에 값이 있는지 확인 후, 있을 때 pop() 메소드를 통해 빼내는 것을 반복한다.
  • isEmpty(): 비어있으면 true를 반환하고, 값이 존재하면 false를 반환한다.



💦 회고

int 값을 사용했는데, int 대신에 stack 을 사용해서 넣었다. 빼는 것을 진행하면 되는 것이었다! 조금만 생각을 더 했다면 stack을 간단하게 사용할 수 있었을 것 같은데 아쉽다




참고
https://velog.io/@doxxx93/practice-kit-stack-queue-1
https://coding-factory.tistory.com/602
https://wyatti.tistory.com/entry/JAVA-Stack에서-empty와-isEmpty를-이해하고-활용하기

profile
신입 개발자 쥬비의 기술 블로그 입니다.

0개의 댓글