짝지어 제거하기

NJW·2022년 4월 19일
0

코테

목록 보기
37/170

들어가는 말

처음에는 문제를 이해하지 못했다. 어떤 순서대로 삭제하는지 모르겠고 띄어쓰기의 기준도 모르겠고..? 근데 그런 거 없는 문제였다. 그냥 붙어 있는 문자 두 개를 삭제해서 문자열이 완전히 제거되는지 알아보는 문제였다.
괜히 복잡하게 생각해서 블로그를 보게 만들어... 가볍게 스텍으로 풀 수 있는 문제였는데.

코드 설명

answer에는 0을 넣어준다. 만일 for문을 돌리고도 스텍에 값이 남아 있다면 1이다. for문을 돌리는데 스텍에 원소가 있고 원소 중 top이 넣을 원소와 같다면 top을 pop한다. 원소를 하나만 제거한다고 걱정할 필요가 없는 게 어차피 s[i]는 스텍에 넣지도 않을 거니까 삭제한 것과 마찬가지다. 위의 조건에 부합하지 않는다면 스텍에 push한다.

코드

#include <iostream>
#include<string>
#include<stack>

using namespace std;

int solution(string s)
{
    int answer = 1;
    stack<char> sc;
    
    /*sc에 원소가 존재하고 넣으려는 값과 스택의 제일 위의 값이 같다면 pop한다.
    이때 두 개를 삭제해야 하는데 하나만 삭제한다고 걱정할 필요는 없다.
    sc의 탑 원소와 같은 s[i]는 stack에 들어가지 않기 때문에 삭제한 것으로 간주한다.*/
    for(int i=0; i<s.size(); i++){
        if(sc.size() >0 && sc.top() == s[i]){
            sc.pop();
        }else{
            /*스텍에 원소가 없거나 두 문자가 같지 않으면 문자를 스텍에 넣어준다.*/
            sc.push(s[i]);
        }
    }
    
    /*문자열을 전부 돌리고 난 다음에 만일 스텍에 원소가 남아있더면 0을 반환.*/
    if(sc.size() != 0){
        answer = 0;
    }

    return answer;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글