https://school.programmers.co.kr/learn/courses/30/lessons/12909
괄호가 제대로 쌍을 이루었는지 체크하면 된다.
문제 분류는 스택/큐 에 속해 있으므로 스택을 쓰면 된다는 힌트가 있지만, 스택없이 단순 카운팅 만으로도 해결 된다.
그래도 문제의 취지에 맞게 스택을 사용한 버전도 같이 써봄
import java.util.*;
class Solution {
boolean solution(String s) {
char[] ca = s.toCharArray();
// 스택 미사용
// return withoutStack(ca);
// 스택 사용
return withStack(ca);
}
boolean withoutStack(char[] ca) {
int cnt = 0;
for (char c : ca) {
if (c == '(') {
// 괄호가 열리면 카운팅
cnt++;
} else {
// 괄호가 닫히면 마이너스.
// 열린 괄호보다 닫힌 괄호가 많아지는 순간 잘못된 괄호이다.
if (--cnt < 0) return false;
}
}
// 마지막으로 덜 닫힌 괄호 체크
return cnt == 0;
}
boolean withStack(char[] ca) {
Stack<Character> stack = new Stack();
for (char c : ca) {
if (c == '(') {
// 괄호가 열리면 스택에 넣고,
stack.push(c);
} else {
// 괄고가 닫히면 스택에서 제거한다.
// 열린 괄호가 없다면 잘못된 괄호.
if (stack.isEmpty()) return false;
stack.pop();
}
}
// 덜 닫힌 괄호 체크
return stack.isEmpty();
}
}
'코딩테스트 > programmers' 카테고리의 다른 글
숫자의 표현 (0) | 2023.09.11 |
---|---|
이진 변환 반복하기 (0) | 2023.09.11 |
최솟값 만들기 (0) | 2023.09.07 |
JadenCase 문자열 만들기 (0) | 2023.09.07 |
최댓값과 최솟값 (0) | 2023.09.07 |