본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 괄호 회전하기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

괄호를 회전시켜 가면서 올바른 괄호가 몇 개인지를 찾는 문제

import java.util.Deque;
import java.util.LinkedList;
import java.util.Stack;
class Solution {
    public int solution(String s) {
        int answer = 0;
        Deque<String> dq = new LinkedList<>();
        for (int i = 0; i < s.length(); i++) {
            dq.add(s.substring(i, i+1));
        }
        for (int i = 0; i < s.length(); i++) {
            dq.addLast(dq.pop());
            answer += func(dq);
        }
        return answer;
    }

    public static int func(Deque<String> dq) {
        String[] s = new String[dq.size()];
        for (int i = 0; i < s.length; i++) {
            s[i] = dq.pop();
            dq.addLast(s[i]);
        }
        Stack<String> st = new Stack<>();
        st.add(s[0]);
        for (int i = 1; i < s.length; i++) {
            if (st.isEmpty()) {
                st.add(s[i]);
                continue;
            }
            if (st.peek().equals("[") && s[i].equals("]")) {
                st.pop();
            } else if (st.peek().equals("{") && s[i].equals("}")) {
                st.pop();
            } else if (st.peek().equals("(") && s[i].equals(")")) {
                st.pop();
            } else {
                st.add(s[i]);
            }
        }
        if (!st.isEmpty()) return 0;
        return 1;
    }
}

데크를 이용하여 회전을 구현하고 스택과 배열을 이용하여 괄호가 정상적인지를 확인하여 정상적이면 1을, 아니라면 0을 리턴 하여 정답을 구했다