‡ CODING TEST STUDY ‡/º 프로그래머스

[프로그래머스 Lv.2 Java] 스택/큐 | 올바른 괄호

Trudy | 송연 2023. 12. 5. 15:25

문제

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

 

프로그래머스

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

programmers.co.kr

 


이해하기

 

https://xoxoxoxox.tistory.com/35

 

[백준 9012번 C++] 괄호

9012번: 괄호 (acmicpc.net) 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올

xoxoxoxox.tistory.com

위에서 백준에서 푼 문제와 거의 비슷했다.


1. ( 와  )의 개수가 같아야할 뿐만 아니라,
2. (가 나오기 전에 ) 가 먼저 나온다면 바로 false를 return하게 해준다. 

 

 

스택을 이용해서 풀었는데, ( 가 나오면 스택에 push를 해줬다.

)가 나오면 (를 pop을 해서 () 쌍이 나오면 삭제되게 했다. 

따라서 ( 가 나왔는데, 스택에 비어있다면 2번과 같은 경우이다. 

그렇게 for문으로 모든 문자열을 다 돌았을때, stack이 비어있다면 알맞게 모든 쌍이 이루어져 true이고, 

stack에 (가 남아있다면, 쌍이 맞지 않으니 false가 된다. 


코드

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(s.charAt(i));
            }
            else if(s.charAt(i) == ')') {
                if(stack.isEmpty()) return false;
                stack.pop();
            }
        }
        if(stack.isEmpty()) return true;
        else return false;

    }
}

실행 결과