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

namkun·2022년 8월 24일
0

코딩테스트

목록 보기
44/79

문제 링크

괄호 회전하기

풀이

  • 해당 문제는 스택 문제이다.

  • 여는 괄호를 스택에 넣고, 닫는 괄호를 만나면 pop 해준다. 만약 반복문을 다 돌았음에도 stack의 크기가 0보다 크거나, 아니면 열린 괄호가 스택에 없음에도 불구하고 닫힌 괄호가 먼저 들어온다면 그 순간 false를 리턴해주면 된다.

  • 큐는..편리하게 코드를 짜기위해 썼는데, 별 탈 없이 넘어간 것 같다. (StringBuilder로 하는게 좀 더 높은 점수를 받지 않았을까 싶다.)

    
    import java.util.LinkedList;
    import java.util.Stack;
    
    class Solution {
    
        public int solution(String s) {
            if (s.length() % 2 == 1) return 0;
    
            char[] chars = s.toCharArray();
            LinkedList<Character> queue = new LinkedList<>();
            for (char c : chars) queue.add(c);
    
            int cnt = 0;
            for (int i = 0; i < s.length(); i++) {
                if(isRight(queue)) cnt++;
                queue.addLast(queue.poll());
            }
    
            return cnt;
        }
    
        public boolean isRight(LinkedList<Character> q) {
            Stack<Character> stack = new Stack<>();
    
            if (q.getFirst() == ')' || q.getFirst() == '}' || q.getFirst() == ']'){
                return false;
            }
    
            for (char c : q) {
                if(c == '(' || c == '{' || c == '[') stack.push(c);
                else if(stack.size() > 0){
                    if(c == ')' && stack.peek() == '('){
                        stack.pop();
                    } else if(c == ']' && stack.peek() == '['){
                        stack.pop();
                    } else if(c == '}' && stack.peek() == '{'){
                        stack.pop();
                    } else {
                        return false;
                    }
                } else {
                    return false;
                }
            }
    
            return true;
        }
    }

    소감

    • 귀찮아 하면 점수가 낮아진다.
profile
개발하는 중국학과 사람

0개의 댓글