import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
Map<Character, Integer> map = new HashMap<>();
String new_s = "";
for(int i=0; i<s.length(); i++){
map.put('[',0);
map.put('{',0);
map.put('(',0);
int open =0;
new_s = s.substring(i, s.length())+ s.substring(0, i);
for(char c : new_s.toCharArray()){
if(c == '[' || c == '{' || c == '('){
map.put(c, map.get(c)+1);
}else{
if(c == ']') c= '[';
else if(c == '}') c ='{';
else c ='(';
if(map.get(c) == 0){
open = -1;
break;
}
map.put(c, map.get(c)-1);
}
}
if(open == 0){
answer += 1;
}
}
return answer;
}
}
{ ( { ) } }
이런식이 가능 하다고 생각하여 맵으로 만들었으나 조건을 잘못줘서 실패함
고민해보니
{ ( [ ] ) }
무조건 열면 다음걸로 닫아야 하는게 괄호임
그러면 순서대로 넣고 앞에것만 확인하면 되니 스택임
그래서 스택을 사용하기로 함
import java.util.Stack;
class Solution {
public int solution(String s) {
int answer =0;
String new_s = "";
for(int i=0; i<s.length(); i++){
new_s = s.substring(i, s.length())+ s.substring(0, i);
if(check(new_s)){
answer+=1;
}
}
return answer;
}
private boolean check(String s){
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()){
if(c == '[' || c =='{' || c == '('){
stack.push(c);
}else{
if(!stack.isEmpty()){
switch(c){
case ']':
if(stack.peek() == '['){
stack.pop();
}
break;
case ')':
if(stack.peek() == '('){
stack.pop();
}
break;
case '}':
if(stack.peek() == '{'){
stack.pop();
}
break;
}
}else{
stack.push(c);
break;
}
}
}
return stack.isEmpty();
}
}