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

수민이슈·2023년 10월 23일
0

[C++] 코딩테스트

목록 보기
102/116
post-thumbnail

🖊️ 문제

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


🖊️ 풀이

처음에는 시프트 연산을 쓰려고 했는데, string이라 고민했다.
근데 문자열의 길이도 그닥 길지 않아서, 괜찮을 것 같았다.

pop_front, push_back이 필요함
-> 그러면 앞뒤로 모두 접근이 가능한 자료구조를 쓰자

-> deque

괄호 연산의 유효검사는 stack을 이용했다.

이지하게 10분컷했던 문제

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

using namespace std;

bool isValid(deque<char> s)
{
    stack<char> st;
    for(auto& c : s) {
        if (c == ']') {
            if (st.empty()) return false;
            if (st.top() == '[') 
                st.pop();
            else return false;
        }
        else if (c == '}') {
            if (st.empty()) return false;
            if (st.top() == '{')
                st.pop();
            else return false;
        }
        else if (c == ')') {
            if (st.empty()) return false;
            if (st.top() == '(')
                st.pop();
            else return false;
        }
        else
            st.push(c);
    }
    if (!st.empty()) return false;
    else return true;
}

int solution(string s) {
    int answer = 0;
    
    deque<char> deq;
    for(auto& c : s)
        deq.push_back(c);
    
    for (int i =0 ;i < s.length() ; i++) {
        char c = deq[0];
        deq.pop_front();
        deq.push_back(c);
        if (isValid(deq)) answer++;
    }
    
    return answer;
}

0개의 댓글