[프로그래머스/12909] 올바른 괄호
in Study / Coding Test
☑️ 문제
☑️ 풀이
- Stack을 이용하여 괄호의 짝을 맞춰주려고 했다.
- Stack이 비어있을 때
- 현재 괄호가
(
인 경우, Stack에 넣어준다. - 현재 괄호가
)
인 경우, 괄호의 짝이 맞지 않기 때문에 false를 반환한다.
- 현재 괄호가
- Stack이 비어있지 않을 때
- 현재 괄호가
(
인 경우, Stack에 넣어준다. - 현재 괄호가
)
인 경우, Stack에 마지막으로 들어온 괄호가(
이면 괄호의 짝이 맞기 때문에 Stack에서pop()
해준다.
- 현재 괄호가
- 이런 식으로 s의 끝까지 반복한 후에,
- Stack이 비어 있다면 괄호의 짝이 다 맞은 것이기 때문에 true를 반환한다.
- Stack이 비어 있지 않다면 짝이 맞지 않은 괄호가 존재하기 때문에 false를 반환한다.
// 시간: 0.64ms
// 메모리: 89MB
import java.util.*;
class Solution {
boolean solution(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (stack.isEmpty() && c == '(') {
stack.push(c);
} else if (stack.isEmpty() && c == ')') {
return false;
} else {
char top = stack.peek();
if ((top == '(') && (c == ')')) {
stack.pop();
} else {
stack.push(c);
}
}
}
if (!stack.isEmpty()) {
return false;
} else {
return true;
}
}
}
☑️ 문법 정리 - 문자열 추출
- 문자열 추출
a.charAt(i)
: 문자열 a의 i번째 문자를 추출charAt()
은 char 타입의 값을 반환 ⇒ char 값 비교 시에는 작은 따옴표를 사용! (큰따옴표는 문자열 string)