티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/76502
import java.util.Stack;
class Solution {
static char[] open={'[','(','{'};
static char[] close={']',')','}'};
public int solution(String s) {
int answer = 0;
String rotate=s;
for (int i=0; i<s.length(); i++){
if (isRight(rotate)){
answer++;
}
rotate=rotate.substring(1)+rotate.charAt(0);
}
return answer;
}
public boolean isRight(String s){
Stack<Character> st=new Stack<>();
boolean answer=true;
for (int i=0; i<s.length(); i++){
char c=s.charAt(i);
if (c=='[' || c=='(' || c=='{'){
st.push(c);
}
else{
if (st.empty()){
answer=false;
break;
}
if (open[search(c)]==st.peek()){
st.pop();
}
else{
answer=false;
break;
}
}
}
if (!st.empty()){
answer=false;
}
return answer;
}
public int search(char c){
int num=-1;
for (int i=0; i<3; i++){
if (c==close[i]){
num=i;
break;
}
}
return num;
}
}
스택을 이용해 풀이하는 문제.
열린 괄호가 나왔을 땐 스택에 넣어주고, 닫힌 괄호가 나왔을 때 1) 스택이 비었을 경우 2) 스택의 top 에 있는 값이 매칭된느 열린 괄호가 아닐 경우 옳지 않은 괄호이므로 false를 리턴하도록 한다.
회전하는 것은 반복문을 이용해서, substring 해서 바꿔주도록 한다.
'Problem Solving' 카테고리의 다른 글
[SW Expert 1210] Ladder1 (Java) (0) | 2022.02.04 |
---|---|
[프로그래머스] k진수에서 소수 개수 구하기 (Java) (0) | 2022.01.31 |
[프로그래머스] 양궁 대회 (Java) (0) | 2022.01.27 |
[SW Expert 1249] 보급로 (Java) (0) | 2022.01.26 |
[프로그래머스] 보석 쇼핑 (Java) (0) | 2022.01.25 |