문제 설명
다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.
(), [], {} 는 모두 올바른 괄호 문자열입니다.
만약 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
풀이 - switch
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++){
String str = s.substring(i)+s.substring(0,i);
Stack<String> st = new Stack<>();
boolean chk = false;
String pe = "";
for(int j=0; j<str.length(); j++){
String ss = str.substring(j, j+1);
switch(ss){
case "]" :
if(st.size()==0){
chk = true;
break;
}
pe = st.peek();
if(!pe.equals("[")){
chk=true;
} else {
st.pop();
}
break;
case "}" :
if(st.size()==0){
chk = true;
break;
}
pe = st.peek();
if(!pe.equals("{")){
chk=true;
} else {
st.pop();
}
break;
case ")" :
if(st.size()==0){
chk = true;
break;
}
pe = st.peek();
if(!pe.equals("(")){
chk=true;
} else {
st.pop();
}
break;
default :
st.push(ss);
break;
}
if(chk){ // 빠른 검색을 위해 올바르지않을 경우 반복문 멈춤
break;
}
}
if(st.size()!=0){ // 남은 것이 있을 경우 올바르지않음
continue;
}
if(!chk){ //
answer++;
}
}
return answer;
}
}
풀이 - if
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++){
String str = s.substring(i)+s.substring(0,i);
Stack<String> st = new Stack<>();
boolean chk = false;
String pe = "";
for(int j=0; j<str.length(); j++){
String ss = str.substring(j, j+1);
if(st.size()!=0&&st.peek().equals("[")&&ss.equals("]")){
st.pop();
} else if(st.size()!=0&&st.peek().equals("{")&&ss.equals("}")){
st.pop();
} else if(st.size()!=0&&st.peek().equals("(")&&ss.equals(")")){
st.pop();
} else {
st.push(ss);
}
}
if(st.size()==0){ // 남은 것이 없을 때 올바른 것
answer++;
}
}
return answer;
}
}
'programmers' 카테고리의 다른 글
[JAVA] 광물 캐기 (0) | 2024.07.18 |
---|---|
[JAVA] 마법의 엘리베이터 (0) | 2024.07.18 |
[JAVA] △ 카펫 (0) | 2024.07.17 |
[JAVA] 올바른 괄호 - stack (0) | 2024.07.17 |
[JAVA] 소수만들기 - 에라토스테네스의 체 (0) | 2024.07.16 |