프로그래머스
[프로그래머스/Java] 괄호 회전하기
웅둘
2023. 8. 21. 20:56
📚 괄호 회전하기
[JAVA] 프로그래머스 Level 2.
코딩테스트 연습 - 괄호 회전하기 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
- (), [], {} 는 모두 올바른 괄호 문자열입니다.
- 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
- 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.
대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
제한사항
• s의 길이는 1 이상 1,000 이하입니다.
입출력 예
s | result |
"{}" | 3 |
"}]()[{" | 2 |
"[)(]" | 0 |
"}}}" | 0 |
문제 해결 방안
'[' , '(', '{' 는 스택에 무조건 넣는다.
그 반대 괄호 문자열이 올 경우 같은 종류로 일치하는 문자열이 반드시 와야한다.
소스 코드
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++) {
StringBuilder st = new StringBuilder();
Stack<Character> stack = new Stack<>();
st.append(s.substring(i, s.length()));
st.append(s.substring(0, i));
String str = st.toString();
for(int k=0; k<s.length(); k++) {
char c = str.charAt(k);
if(c == '[' || c=='(' || c=='{') {
stack.add(c);
} else {
if(stack.size()==0) {
break;
} else {
if(stack.peek()=='[' && c==']') {
stack.pop();
} else if(stack.peek()=='(' && c==')') {
stack.pop();
} else if(stack.peek()=='{' && c=='}') {
stack.pop();
} else {
break;
}
}
}
if(k==s.length()-1 && stack.size()==0) {
answer++;
}
}
}
return answer;
}
}