괄호 회전하기

유승선 ·2024년 2월 14일
0

프로그래머스

목록 보기
46/48

문제는 쉽게 풀었다. Stack 을 이용하는 문제에서 문자열을 회전하는 부분이 있었는데 이것도 그냥 내가 아는 지식 안에서 substring 을 사용하면 금방 풀 수 있을거라 생각했다.

문자열이 홀수면은 바로 0을 반환해주는 최적화까지 더해서 나름 잘푼거같다.

그리고 stack 문제를 풀때는 꼭 empty() 조건을 찾아주는것도 잊지말자.

#include <string>
#include <vector>
#include <bits/stdc++.h> 
using namespace std;

bool check(stack<char>& charStack, string& s){
    if(s[0] == ']' || s[0] == ')' || s[0] == '}') return false; 
    for(int i = 0; i < s.length(); i++){
        if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
            charStack.push(s[i]); 
        } else{
            if(charStack.empty()) return false; 
            char left = charStack.top();
            char right = s[i]; 
            if(left == '(' && right == ')')  charStack.pop(); 
            if(left == '{' && right == '}') charStack.pop(); 
            if(left == '[' && right == ']') charStack.pop(); 
        }
    }
    
    return charStack.empty(); 
}

int solution(string s) {\
    if(s.length() % 2 == 1) return 0; 
    int answer = 0;
    //stack<char> charStack; 
    for(int i = 0; i < s.length(); i++){
        stack<char> charStack; 
        //stack 로직 
        if(check(charStack,s)) answer++; 
        //s 형태 바꾸기
        s = s.substr(1) + s.substr(0,1);  
    }
    return answer;
}
profile
성장하는 사람

0개의 댓글