지원서 쓰랴,, 토익 하랴,, 정신없지만,, 해내자
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
()
, []
, {}
는 모두 올바른 괄호 문자열입니다.A
가 올바른 괄호 문자열이라면, (A)
, [A]
, {A}
도 올바른 괄호 문자열입니다. 예를 들어, []
가 올바른 괄호 문자열이므로, ([])
도 올바른 괄호 문자열입니다.A
, B
가 올바른 괄호 문자열이라면, AB
도 올바른 괄호 문자열입니다. 예를 들어, {}
와 ([])
가 올바른 괄호 문자열이므로, {}([])
도 올바른 괄호 문자열입니다.대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s
가 매개변수로 주어집니다. 이 s
를 왼쪽으로 x (0 ≤ x < (s
의 길이)) 칸만큼 회전시켰을 때 s
가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.
s | result |
---|---|
"[](){}" |
3 |
"}]()[{" |
2 |
"[)(]" |
0 |
"}}}" |
0 |
입출력 예 #1
"[](){}"
를 회전시킨 모습을 나타낸 것입니다.x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
---|---|---|
0 | "[](){}" |
O |
1 | "](){}[" |
X |
2 | "(){}[]" |
O |
3 | "){}[](" |
X |
4 | "{}[]()" |
O |
5 | "}[](){" |
X |
입출력 예 #2
"}]()[{"
를 회전시킨 모습을 나타낸 것입니다.x | s를 왼쪽으로 x칸만큼 회전 | 올바른 괄호 문자열? |
---|---|---|
0 | "}]()[{" |
X |
1 | "]()[{}" |
X |
2 | "()[{}]" |
O |
3 | ")[{}](" |
X |
4 | "[{}]()" |
O |
5 | "{}]()[" |
X |
입출력 예 #3
입출력 예 #4
import java.util.*;
class Solution {
public int solution(String s) {
int ans = 0;
for(int i = 0 ; i < s.length() ; i++){
String temp = "";
for(int j = i ; j < s.length() ; j++){
temp += s.charAt(j);
}
for(int j = 0 ; j < i ; j++){
temp += s.charAt(j);
}
Stack<Character> stack = new Stack<>();
for(int k = 0 ; k < temp.length() ; k++){
char unit = temp.charAt(k);
if(!stack.isEmpty()) {
char temp_unit = stack.peek();
if(unit == reverse_check(temp_unit)){
stack.pop();
}else{
stack.add(unit);
}
}else{
stack.add(unit);
}
}
if(stack.isEmpty()) ans++;
}
return ans;
}
public static Character reverse_check(char temp){
if(temp == '[') return ']';
if(temp == '(') return ')';
if(temp == '{') return '}';
return '@';
}
}
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
int strLen = s.length();
for(int i = 0; i < strLen; i++)
answer += cal(s, i, strLen);
return answer;
}
public int cal(String s, int strtIdx, int strLen){
int ret = 0;
Stack<Character> st = new Stack<>();
for(int i = strtIdx; i < strtIdx + strLen; i++){
int idx = i % strLen;
char c = s.charAt(idx);
if(c == '(' || c == '{' || c == '[')
st.push(c);
else if(c == ')' || c == '}' || c == ']'){
if(st.empty())
return 0;
else if((st.peek() != '(' && c == ')') || (st.peek() != '{' && c == '}') || (st.peek() != '[' && c == ']'))
return 0;
else
st.pop();
}
}
if(!st.empty())
return 0;
return 1;
}
}