본문 바로가기

온라인 코딩/큐(Queue)와 스택(Stack)

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

 

문제

소스코드

#include <string>
#include <vector>
#include<deque>
#include<stack>

using namespace std;

bool RotateArray(int weight,std::deque<char> deque) {

    for (int i = 0; i < weight; ++i) {
        auto front = deque.front();
        deque.pop_front();
        deque.push_back(front);
    }

    if (deque[0] == '}' || deque[0] == ')' || deque[0] == ']') return false;

    std::stack<char> stack{};
    while (deque.empty() == false) {

        auto front = deque.front();
        deque.pop_front();


        if (front == '[' || front == '{' || front == '(') {
            stack.push(front);
        }

        else if (stack.empty() == false) {

            if (stack.top() == '[' && front == ']') {
                stack.pop();
            }

            else if (stack.top() == '{' && front == '}') {
                stack.pop();
            }

            else if (stack.top() == '(' && front == ')') {
                stack.pop();
            }
        }

    }

    return stack.size() == 0 ? true : false;
}

int solution(string s) {
    int answer = 0;

    std::deque<char> deque{};

    for (int i = 0; i < s.size(); ++i) {
        deque.emplace_back(s[i]);
    }


    for (int i = 0; i < s.size(); ++i) {
        if (RotateArray(i, deque) == true) {
            ++answer;
        }
    }
    return answer;
}

 

후기

이 문제는 x만큼 왼쪽으로 밀어낸 array가 올바른 괄호 형태인지 판단하는 문제이다.

 

먼저 deque컨테이너에 괄호 값을 넣고 x만큼 움직인다.

그 후 Stack을 통해 올바른 괄호 형태인지 파악한다. 왼쪽 괄호 (, {, [ 형태이면 stack에 push 오른쪽이라면 pop 하는 형태를 통해 해당 Stack이 0이면 올바른 형태 0이 아니라면 올바르지 못한 괄호라는 것을 판단할 수 있다.

 

출처 및 레퍼런스

문제 링크: 코딩테스트 연습 - 괄호 회전하기 | 프로그래머스 (programmers.co.kr)

 

관련 글

[온라인 코딩/큐(Queue)와 스택(Stack)] - [구름 IDE] 괄호 짝 맞추기 ★★★★☆

 

 

'온라인 코딩 > 큐(Queue)와 스택(Stack)' 카테고리의 다른 글

[백준] 2493번 탑  (0) 2020.09.09
[백준] 10409번 서버  (0) 2020.08.11
[백준] 1966번 프린터 큐  (0) 2020.07.29
[프로그래머스] 크레인 인형뽑기 게임  (0) 2020.05.18
[백준] 10828번 스택  (0) 2020.03.23