[Programmers]괄호 회전하기

김토리·2024년 9월 25일

알고리즘

목록 보기
19/27

  1. 주어진 문자열을 회전하여 순차적으로 괄호가 전부 닫아질 수 있다면 answer에 1을 더한다.
  2. 문자열이 짝수개가 아니라면 0을 return한다. => 닫히지 않는 괄호가 발생하기 때문이며 이를 처리하지 않으면 테스트 케이스에서 오류가 남.

** 딱 보고 스택이나 큐로 풀 수 있는 문제라고 생각하였고 나중에 나온 괄호가 먼저 닫힐 때도 있으므로 스택을 사용하였다.

  • 처음에는 문제를 제대로 읽지 않아서 닫히는 괄호의 갯수가 최대일 때를 return 하였고, len사이즈만큼 반복해서 틀렸었다. => 정확한 요구 사항을 확인하는 습관을 길러야겠다.
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;

int solution(string s) {
    int answer = 0,len = s.length() ;
    if(len%2 == 1) return 0; // 문자열 길이가 홀수면 0 리턴
    stack<char> st; //괄호를 넣을 스택 선언
    
    for(int j = 0 ; j < len ;j++){
        int total = 0 ;
        
        for(int i = 0 ; i < len ; i++){
            if(s[i] == '[' || s[i] == '{' || s[i] == '('){
                st.push(s[i]);
            }
            else if(s[i] == ']' && st.top() == '[') {
                st.pop();
                total++;
            }else if( s[i] == '}' && st.top() == '{' ){
                st.pop();
                total++;
            }else if( s[i] == ')'  && st.top() == '('){
                st.pop();
                total++;
            }else{
                break;
            }
        }
        
        if(total == (len/2) && st.empty()){
        //스택이 비어있고 괄호들의 짝이 전부 맞다면 answer +1
            answer ++;
        }
        
        //문자열 회전
        s = s.substr(1,len-1)+s[0];
       
    }
    return answer;
}
profile
웹 개발하며 데이터 분석, AI 공부하는 jinveloper

0개의 댓글