[스택&구현] 프로그래머스 "짝지어 제거하기"

2021. 6. 26. 16:44알고리즘 문제분석

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

 

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

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

programmers.co.kr

수행시간 : 40분 / 난이도 : 레벨 2

 

로직을 짤때 스택을 생각 안하고 재귀적으로 제거하려 했다가 시간을 엄청 소비했다. 같이 문제푸는 친구가 힌트를 살짝줘서 스택으로 구현 완료했다.

로직은, 스택의 top과 vector의 인덱스를 하나씩 비교하면서 같으면, pop 다르면 push 해주는 간단한 알고리즘이다.

 

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

int solution(string s)
{
    int answer = -1;
    stack<char> temp;
    for(int i = 0; i<s.size();++i){
        if(temp.size() == 0){
            temp.push(s[i]);
        }
        else if(temp.top() == s[i]){
            temp.pop();
        }
        else{
            temp.push(s[i]);
        }
    }
    if(temp.size() ==0){
        answer = 1;
    }
    else{
        answer = 0;
    }
    
    
    return answer;
}