본문 바로가기

PS

[Programmers] LV2 - 괄호 회전하기

https://programmers.co.kr/learn/courses/30/lessons/76502

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

 

 

문제 파악

 

주어진 문자열을 왼쪽으로 회전시켜 가면서 올바른 괄호 문자열이 만들어지는지 확인하는 것

회전하면서 몇 개의 올바른 괄호 문자열이 만들어지는지 반환 해주면 된다.

 

더보기
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