프로그래머스 2) 괄호 회전하기

유병수·2023년 4월 28일
0

프로그래머스 레벨2 괄호 회전하기

괄호 삭제하기 문제는 되게 많이 나오는 문제이다. 이 문제 뿐만 아니라 짝지어 삭제하는 유형의 문제가 의외로 많다.

이번 문제의 차이점이라면 글자가 회전하는게 끼여 있다는 점인거 같다.

예전에 풀당시에는 스택으로 풀지않았는데 이번에는 스택을 사용해서 풀어봤다.

받은 문자열을 하나의 스택으로 만들고, 빈 스택을 만들어서 하나씩 뽑아가면서 짝이지어지면 삭제하는 형식으로 만들었다.

import java.util.*;

class Solution {
    
        public boolean check(Deque<String> deque){
        boolean answer = false;
        Deque<String> temp = new ArrayDeque<>(deque);
        Deque<String> check = new ArrayDeque<>();


        while(!temp.isEmpty()){
            String pop = temp.removeLast();
            String peek = check.peekFirst();
            String pair = "";

            switch (pop) {
                case "[":
                    pair = "]";
                    break;
                case "{":
                    pair = "}";
                    break;
                case "(":
                    pair = ")";
                    break;
            }

            if(check.isEmpty()){
                check.addFirst(pop);
            } else if (peek.equals(pair)) {
                check.removeFirst();
            }else {
                check.addFirst(pop);
            }
        }

        if(check.isEmpty()){
            answer = true;
        }
        return answer;
    }
    
    
    public int solution(String s) {
        int answer = 0;
        int size = s.length();
        String[] split = s.split("");

        Deque<String> deque = new ArrayDeque<>(Arrays.asList(split));

        while(size > 0){
            boolean temp = check(deque);
            String pop = deque.removeFirst();
            deque.addLast(pop);
            if(temp) answer += 1;
            size -= 1;
        }
        
        return answer;
    }
}

생각보다 시간초가 많이 나오는거 같아서 줄일수 있는 방법을 생각해봤는데, 스택에 짝이 없이 "[, {, ("가 나오면 바로 리턴하게 해봤다.

바꾸기 전에는 전체 스택을 다 돌아야했지만 케이스를 지정해줘서 바로 리턴해주는 방식을 사용하니 시간초가 많이 줄어들었다. case문이 조금 많아져서 지저분해졌지만 속도는 빨라졌다. 다음에는 코드도 조금더 정갈하게 짜보도록 해봐야겠다!

0개의 댓글