https://programmers.co.kr/learn/courses/30/lessons/76502
문제 파악
주어진 문자열을 왼쪽으로 회전시켜 가면서 올바른 괄호 문자열이 만들어지는지 확인하는 것
회전하면서 몇 개의 올바른 괄호 문자열이 만들어지는지 반환 해주면 된다.
더보기
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
//홀수면 올바른 괄호를 만들 수 없기 때문에
if(s.length()%2 == 1){
return answer;
}
for(int idx = 0; idx<s.length()-1;idx++){
answer+=rotate(s,idx);
}
return answer;
}
public int rotate(String s, int start){
int len = s.length();
int loop = len+start;
char[] c = new char[len];
int index=0;
for(int idx = start;idx<loop;idx++)
{
int i = idx%len;
c[index] = s.charAt(i);
index++;
}
return isCorrect(c) ? 1 : 0;
}
public boolean isCorrect(char[] c){
Stack<Character> st = new Stack<>();
for(int idx = 0; idx<c.length;idx++)
{
if(!st.isEmpty())
{
char peek = st.peek();
if( peek == '{' && c[idx] == '}' || peek == '(' && c[idx] == ')' || peek == '[' && c[idx] == ']'){
st.pop();
} else {
st.push(c[idx]);
}
}
else{
st.push(c[idx]);
}
}
return st.isEmpty();
}
}
코드를 좀 더 간결하고 클린하게 짜는 연습을 해야겠다. 더불어서 메모리와 속도도 고려하며
'PS' 카테고리의 다른 글
[Programmers] LV2 - 배달 (0) | 2021.07.15 |
---|---|
[Programmers] LV1 - 숫자 문자열과 영단어 (0) | 2021.07.12 |
[BOJ] 1865번 : 웜홀 (0) | 2021.07.06 |
[BOJ]11404번 : 플로이드 (0) | 2021.07.06 |
[Programmers] LV3 - 단어 변환 (0) | 2021.07.05 |