개발하는 kim-hasa

[c++][프로그래머스] 짝지어 제거하기 본문

Algorithm/Programmers(c++)

[c++][프로그래머스] 짝지어 제거하기

kim-hasa 2021. 8. 19. 15:12

https://programmers.co.kr/learn/courses/30/lessons/12973

 

코딩테스트 연습 - 짝지어 제거하기

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

programmers.co.kr

붙어있는 단어를 제거하는 문제입니다. 처음에는 벡터로 풀었지만, 테스트케이스 13번이 문제가 생겨서 스택으로 바꾸어서 해결했습니다.

 

이론은 간단합니다. 한 단어씩 스택에 넣고, 맨 위와 다음에 넣을 단어가 같다면 제거하는 방식입니다. 이 때 모든 단어가 제거된다면 1을, 아니라면 0을 리턴합니다.

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

int solution(string s)
{
    int answer = 0;
    
    if(s.length() % 2 == 1) // 길이가 홀수라면 무조건 불가
        return answer;
    
    stack<int> s1;      // 계산하기 위한 stack
    
    for(int i=0; i<s.length(); i++)
    {
        if(s1.empty())
            s1.push(s[i]);      // 비어있는 경우 추가
        else
        {
            if(s1.top() == s[i])    // 스택의 맨 위와 같다면
            {
                s1.pop();           // 스택에서 제거
            }
            else
            {
                s1.push(s[i]);      // 아닌경우 스택에 추가
            }
        }
    }
    
    if(s1.empty())      // 완료 후 비어있다면 모두 제거 가능
        answer = 1;
    
    return answer;
}