프로그래머스에서 stack을 활용하는 문제인 괄호 관련 문제들을 풀었고
그와 관련된 내용 중 깨달은 내용들을 정리해보려고 한다
이 문제는 {}(])이렇게 생긴 괄호나 혹은 {} 올바르게 생긴 괄호들을 돌려보면서 몇개나 올바른 괄호가 생기는지 count해주는 문제였다.
여기서 핵심은 어떻게 괄호를 rotate할것인가였는데 StringBuilder의 subString, delete, append 함수를 활용해 돌려주었다.
일단 substring(0,i) 이렇게 해서 그 만큼을 String 변수 substring에 저장합니다
그리고 delete(0,i)를 이용해서 0부터 i 전까지 삭제합니다
마지막으로 append(substring)을 해서 맨 뒤에 붙여줍니다
import java.util.*;
class Solution {
// 한번씩 돌려보고 그 다음에 각각 올바른지 검사하기
public int solution(String s) {
int answer = 0;
for (int i = 0; i < s.length(); i++) {
StringBuilder sb = new StringBuilder(s);
String subString = sb.substring(0,i);
sb.delete(0,i);
sb.append(subString);
//System.out.println(sb.toString());
if (rightString(sb.toString())) answer++;
}
return answer;
}
// [] {} ()
private boolean rightString(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i <s.length(); i++) {
char c = s.charAt(i);
if (stack.isEmpty()) {
if (c == ')' || c == '}' || c == ']') return false;
else stack.push(c);
} else {
if (c == '(' || c == '{' || c =='[') stack.push(c);
else {
if (stack.peek() == '(' && c == ')') stack.pop();
else if (stack.peek() == '{' && c == '}') stack.pop();
else if (stack.peek() == '[' && c == ']') stack.pop();
else return false;
}
}
}
if (!stack.isEmpty()) return false;
return true;
}
}