본문 바로가기
프로그래머스

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

by 콩순이냉장고 2021. 6. 24.

문제 URL : https://programmers.co.kr/learn/courses/30/lessons/76502

 

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

 

programmers.co.kr

 

문제접근법 : 문자열이 올바른 괄호열인지 확인하는 문제입니다. 올바른 괄호열을 확인하기위해선

stack을 이용하면 되겠지요 그리고 문자열을 회전하기위해선 deque를 이용해서 맨앞의값을 뒤에 붙이고 앞의값을 지워서 회전시키는 방법도 있지만 저는 다른방법인 인덱스를 수학적인 계산으로 t번째 회전했을때 t번째부터 조사하면 되니

그 index = (s.size() +i- idx) % s.size(); 라는 공식으로 쉽게 조사하면됩니다. 이런방법도 많이쓰이는 공식이니 공부해놓으시는게 좋습니다.

 

소스코드 : 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//By 콩순이냉장고
#include<bits/stdc++.h>
using namespace std;
string open = "[({";
string close = "])}";
bool check(string &s,int idx) {
    stack<char> st;
    for (int i = 0; i < s.size();i++) {
        int index = (s.size() +i- idx) % s.size();
        int t = find(open.begin(), open.end(), s[index]) - open.begin();
        if (t < open.size()) {
            st.push(s[index]);
        }
        else {
            if (st.empty()) return false;
            t = find(close.begin(), close.end(), s[index]) - close.begin();
            if (st.top() != open[t]) return false;
            st.pop();
        }
 
    }
    return st.empty();
}
int solution(string s) {
    int answer = 0;
    
    for (int i = 0; i < s.size(); i++) {
        if (check(s,i))
            answer++;
    }
    return answer;
}
cs

 

궁금한점 혹은 모르는점 논리적인 지적등 어떤질문이든 댓글은 언제든 환영입니다.