문제 링크
https://programmers.co.kr/learn/courses/30/lessons/76502
스택
구현
올바른 괄호 문제의 변형이 추가된 문제이다.
로직은 다음과 같다.
1. 현 문자열이 올바른 괄호 문자열인지 확인한다.
2. 문자열을 회전 시키고, 다시 원래의 문자열이 나타나기 전까지 1번을 진행한다.
위 로직을 구현해서 answer
를 return 하면된다.
문제 자체는 쉬웠는데 아직 자바에 익숙하지 않아서 문제를 푸는데 오래걸렸다.
import java.util.*;
class Solution {
StringBuffer brackets = new StringBuffer();
public int solution(String s) {
int answer = 0;
brackets.append(s);
while (true) {
if (isCorrectBraket(brackets.toString())) answer += 1;
rotateBraket();
if (s.equals(brackets.toString())) break;
}
return answer;
}
public void rotateBraket() {
char c = brackets.charAt(0);
brackets.deleteCharAt(0);
brackets.append(c);
}
public boolean isCorrectBraket(String s) {
Stack<Character> st = new Stack<Character>();
for (char c : s.toCharArray()) {
if (c == '(') {
st.push(c);
} else if (c == ')'){
if (st.empty()) return false;
if (st.peek() == '(') st.pop();
} else if (c == '{') {
st.push(c);
} else if (c == '}'){
if (st.empty()) return false;
if (st.peek() == '{') st.pop();
} else if (c == '[') {
st.push(c);
} else if (c == ']'){
if (st.empty()) return false;
if (st.peek() == '[') st.pop();
}
}
return st.empty();
}
}