코딩 공부 연습

프로그래머스 짝지어 제거하기

miffy짱 2022. 9. 1. 15:48
반응형

프로그래머스 레벨체크 2단계를 통과했다!

좀 쉬운문제들로 2개가 나와서 할 수 있었던 것 같다 기분이 매우 좋노 아ㅋㅋ

이 문제는 그냥 스택에 계속 집어넣으면서 top에 있는 것과 같으면 pop만 잘 시켜주면 된다.

이 아이디어로 풀면 한 케이스가 seg fault가 나오는데, 이는 스택이 비어있는 경우에 st.top()을 참조하려 하기 때문에 일어난다. 그래서 비어있을 때는 그냥 push 해주는 경우만 추가해주면 무리없게 통과할 수 있다!!

#include <iostream>
#include<string>
#include <vector>
#include <algorithm>
#include <stack>

using namespace std;

int solution(string s)
{
    int answer = -1;
    stack <char> st;
    // 그냥 한번씩 계속 돌면서 없애는편이 나을 거 같음 (i, i+1 ) 비교 멍청하게
    // 효율성에서 문제생기면 다시 생각해봄되지
    st.push(s[0]);
    cout << s.size() << '\n';
    for (int i = 1; i < s.size(); i++)
    {
        if (st.empty())
            st.push(s[i]);
        else if (s[i] == st.top())
            st.pop();
        else
            st.push(s[i]);
    }
    int n = st.size();
    if ( n == 0 )
        return 1;
    else return 0;
}