최대 1 분 소요

[프로그래머스] 쇠막대기

문제 링크

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

int solution(string str) {
    int answer = 0;
    stack <char> st;

    int flag = 0;
    for(int i=0; i<str.length(); i++){
        if(str[i] == '('){
            st.push('(');
            flag = 1;
        }else{
            st.pop();
            if(flag){
                //laser
                answer += st.size();
            }else{
                answer += 1;
            }
            flag = 0;
        }
    }
        

    return answer;
}

image

  • (이면 stack에 넣어주고, 레이저 판별을 위해 flag를 1로 바꿔준다.
  • )이면 stack에서 pop을 해주고, 레이저라면 stack의 사이즈만큼 답을 더해준다.
  • 레이저가 아니라면 한 개의 쇠막대기가 끝났기 때문에 +1을 해 준다.
  • flag를 초기화 시켜준다.

카테고리:

업데이트: