알고리즘/문제풀이 - 프로그래머스
[프로그래머스] 올바른 괄호 Java
나규태
2021. 9. 29. 01:12
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12909
레벨 : Level 2
분류 : 연습문제
코딩테스트 연습 - 올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은
programmers.co.kr
이 문제는 스택을 활용한 문제로 유명하다.
스택에 첫 번째 문자를 넣고 두 번째 문자부터 배열을 돌려 스택에 있는 문자와 배열의 문자가 괄호를 이루는지 확인하는 문제이다.
스택을 활용하지 않고 int로 괄호가 열렸을 때 증가, 괄호가 닫혔을 때 감소를 하여 최종적으로 int 값이 0을 넘어서는지 확인하면 된다.
아래의 풀이를 보면 쉽게 이해할 수 있을 것이다.
아래와 같이 두 가지 풀이를 공유합니다.
Stack을 이용한 풀이 1
import java.util.Stack;
class Solution {
boolean solution(String s) {
char firstChar = s.charAt(0);
char lastChar = s.charAt(s.length()-1);
if(firstChar == ')' || lastChar == '(') return false;
Stack<Character> stc = new Stack<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == '(') {
stc.push(c);
}else {
if(stc.isEmpty()) return false;
stc.pop();
}
}
return (!stc.isEmpty()) ? false : true;
}
}
기본형을 이용한 풀이 2
class Solution {
boolean solution(String s) {
if(s.charAt(0) == ')') return false;
int basketCount = 0;
for(int i = 0; i < s.length(); i++) {
char b = s.charAt(i);
if(b == '(') {
basketCount++;
}else {
if(basketCount <= 0) return false;
basketCount--;
}
}
return (basketCount > 0) ? false : true;
}
}