Algorithm/Programmers

[Java] 올바른 괄호

느낌표 공장장 2022. 10. 1. 21:14

문제

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

 

프로그래머스

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

programmers.co.kr

 


풀이 과정

스택을 활용하여 풀었다.

  1. 여는 괄호(()라면 스택에 넣어준다.
  2. 닫는 괄호라면()) 스택 제일 위가 여는 괄호인지 확인한다. 
    1. 여는 괄호라면 스택에서 꺼낸다. (짝이 맞으니 없애기)
    2. 닫는 괄호라면 올바른 괄호가 아니므로 false를 반환한다.
  3. 스택이 비었다면 true를 그렇지 않다면 올바른 괄호가 아니므로 false를 반환한다.

이 문제는 스택 / 큐 카테고리로 분류되어 있지만, 스택을 쓰지 않고도 괄호를 더하고 빼서 해결할 수도 있다.

 


코드

1) 스택을 활용한 풀이 

import java.util.*;

class Solution {
    boolean solution(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char bracket = s.charAt(i);
            if (bracket == '(') {
                stack.push(bracket);
            } else {
                if (!stack.empty()) {
                    char beforeBracket = stack.peek();
                    if (beforeBracket == '(') {
                        stack.pop();
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            }
        }
        return stack.empty() ? true : false;
    }
}

 

2) 스택 활용하지 않은 풀이

class Solution {
    boolean solution(String s) {
        int count = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                count++;
            } else {
                count--;
            }
            if (count < 0) {
                return false;
            }
        }
        return count == 0 ? true : false;
    }
}

'Algorithm > Programmers' 카테고리의 다른 글

[Java] 다리 위를 지나는 트럭  (0) 2022.10.01
[Java] 완주하지 못한 선수  (0) 2022.10.01
[Python] H-Index  (0) 2022.09.22
[Python] 후보키  (0) 2021.10.28
[Python] 셔틀버스  (0) 2021.10.27