코딩응급실
프로그래머스: 괄호 회전하기 본문
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i = 0; i < s.length(); i++) {
String rotated = s.substring(i) + s.substring(0, i);
if(isValid(rotated)) {
answer++;
}
}
return answer;
}
private boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()) {
if(c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
if(stack.isEmpty()) {
return false;
}
if(c == ')' && stack.peek() != '(') {
return false;
}
if(c == ']' && stack.peek() != '[') {
return false;
}
if(c == '}' && stack.peek() != '{') {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
String s = "[](){}";
Solution sol = new Solution();
int result = sol.solution(s);
System.out.println(result);
}
}
0 | "[](){}" | O |
1 | "](){}[" | X |
2 | "(){}[]" | O |
3 | "){}[](" | X |
4 | "{}[]()" | O |
5 | "}[](){" | X |
[](){} + " " -> Yes
](){} + [ -> No
(){} + [] -> Yes
){} + []( -> No
{} + []() -> Yes
} + [](){ -> No
총 3개만 유효하다.
역시 이런 문제는 Stack 느낌이 팍 난다.
예를 들어, 현재 문자가 ')'인데 스택의 가장 위에 '('가 없다면, 즉 스택에 '['나 '{'가 있다면 이는 올바른 괄호 문자열이 될 수 없다. 이 경우에는 false를 반환하게 된다.
'Java' 카테고리의 다른 글
프로그래머스: 카펫 (1) | 2024.03.06 |
---|---|
프로그래머스: 할인행사 (1) | 2024.03.06 |
프로그래머스: 연속 부분 수열 합의 개수 (0) | 2024.03.06 |
프로그래머스: 귤 고르기(우선순위 큐 Priority Queue) (1) | 2024.03.06 |
프로그래머스: 멀리뛰기(동적알고리즘 Dynamic Programming) (0) | 2024.03.06 |