Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
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
Archives
Today
Total
관리 메뉴

hwooo

프로그래머스 (C/C++) 76502 : 괄호 회전하기 본문

Study/Algorithm

프로그래머스 (C/C++) 76502 : 괄호 회전하기

hwooo 2023. 8. 20. 23:34

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


풀이

스택을 사용하여 '(', '{', '[' 가 들어왔을 땐 스택에 넣어줬고 ')', '}', ']' 가 들어왔을 땐 직전에 들어온 괄호와 짝이 맞는지 확인했다.

짝이 맞을 때만 참을 반환해 answer를 구했다.


코드

#include <string>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
using namespace std;

bool Is_right(string s){
    stack <char> Save;
    map <char, char> M = {{')', '('}, {'}', '{'}, {']', '['}};
    int i;
    
    for(i = 0; i < s.size(); i++){
        if(s[i] == '(' || s[i] == '{' || s[i] == '[')
            Save.push(s[j]);

        else if(s[i] == ')' || s[i] == '}' || s[i] == ']'){
            // 스택이 비어 있거나 짝이 맞지 않으면 거짓 반환
            if (Save.empty() || Save.top() != M[s[j]]) 
                return false;
            Save.pop();
        }
    }
    if(!Save.empty()) return false;
    return true;
}

int solution(string s) {
    int answer = 0, i;
   
    for(i = 0; i < s.size(); i++){
        // 주어진 문자열 s를 한 칸씩 왼쪽으로 밀어줌
        rotate(s.begin(), s.begin() + 1, s.end());
        answer += Is_right(s);
    }
    return answer;
}