s
문자열 | "(())()" | s의 길이는 100,000 이하의 자연수, 소괄호로만 이루어져 있음
올바른 괄호 형태이면 true를 return
(열린괄호가 있다면 닫힌괄호가 존재해야하고, 쌍이 적절하게 맺어져야 함)
스택을 이용해서 열린괄호는 그대로 넣어주고, 닫힌 괄호는 앞에 열린 괄호가 있다면 삭제함. 만약에 열린 괄호가 이전에 없었다면 괄호에 쌍이 맞게 된 것이 아님. 그리고, 전체를 순회한 후에 스택에 남은 값이 있는 경우 또한 열린 괄호가 닫힌 괄호보다 더 많은 경우이므로 false를 반환해야한다.
class Solution {
boolean solution(String s) {
boolean answer = true;
int N = s.length(), p=0;
char[] stack = new char[N];
for(char c : s.toCharArray()){
if(c == ')'){
if(p!=0 && stack[p-1] == '('){
p-=1;
continue;
}else{
answer = false;
break;
}
}
stack[p++] = c;
}
return p==0 && answer?true:false;
}
}
Tip : 스택에 넣고 값을 비교할때는 해당 스택의 조건만 따지는 것이 아니라, 실행이 끝난 후에 스택에 남은 값도 생각해보아야 한다.