
내가 작성한 코드
import java.util.*;
class Solution {
public int solution(String s) {
int count = 0;
int n = s.length();
for (int i = 0; i < n; i++) {
String rotated = s.substring(i) + s.substring(0, i); // 문자열 회전
if (isValid(rotated)) {
count++;
}
}
return count;
}
// 괄호 문자열이 올바른지 확인하는 메서드
private boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (char ch : s.toCharArray()) {
if (ch == '(' || ch == '[' || ch == '{') {
stack.push(ch);
} else {
if (stack.isEmpty()) { // 닫힌 괄호로 시작할 경우
return false;
}
char top = stack.pop();
if ((ch == ')' && top != '(') ||
(ch == ']' && top != '[') ||
(ch == '}' && top != '{')) {
return false;
}
}
}
return stack.isEmpty();
}
}
다른 사람의 코드
import java.util.*;
class Solution {
private final Stack<Character> stack = new Stack<>();
public int solution(String s) {
int answer = 0;
StringBuilder stringBuilder = new StringBuilder(s);
for (int i = 0; i < s.length(); i++) {
// 문자열 회전
stringBuilder.append(stringBuilder.charAt(0));
stringBuilder.deleteCharAt(0);
if (correctParenthesis(stringBuilder.toString().toCharArray()))
answer++;
}
return answer;
}
// 전체 괄호를 검사하는 메서드
private boolean correctParenthesis(char[] s) {
for (char c : s) {
if (!(check(c, '(', ')') && check(c, '[', ']') && check(c, '{', '}')))
return false;
}
return stack.isEmpty();
}
// 괄호를 검사하는 메서드
private boolean check(char c, char a, char b) {
if (c == a)
stack.push(a);
else if (c == b)
if (!stack.isEmpty() && stack.peek() == a) stack.pop(); else return false;
return true;
}
}
Share article