N

(프로그래머스 c++)괄호 회전하기 본문

프로그래머스 알고리즘/2단계

(프로그래머스 c++)괄호 회전하기

naeunchan 2021. 5. 12. 10:50
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/76502?language=cpp

 

코딩테스트 연습 - 괄호 회전하기

 

programmers.co.kr

 

 

스택을 이용한 문제 풀이.

s를 왼쪽으로 s.size() 만큼 회전하면서 올바른 괄호인지 확인한다.

 

바깥 for문은 회전을 위한 for문.

안쪽 for문은 s의 괄호가 올바른 괄호인지 스택을 이용해 확인하는 for문이다.

스택이 비어져있으면 answer++,

비어있지 않으면 올바른 괄호가 아니기 때문에 아무런 행동도 하지 않는다.

#include <string>
#include <vector>
#include <stack>
#include <queue>

using namespace std;

int solution(string s) {
    int answer = 0;
    queue<char> q;
    int size = s.size();
        
    for(int i = 0; i < size; i++){
        stack<char> stk;
        
        for(int j = 0; j < size; j++){
            if(s[j] == '[' || s[j] == '(' || s[j] == '{'){
                stk.push(s[j]);
            }
            else{
                if(!stk.empty()){
                    if((s[j] == ']' && stk.top() == '[') || (s[j] == ')' && stk.top() == '(') || (s[j] == '}' && stk.top() == '{')){
                        stk.pop();
                    }
                    else{
                        stk.push(s[j]);
                    }
                }
                else{
                    stk.push(s[j]);
                }
            }
        }
        
        if(stk.empty()){
            answer++;
        }
        s = s.substr(1) + s[0];
    }
    
    return answer;
}
728x90
반응형