습관처럼

programmers [C++] : 짝지어 제거하기 본문

Algorithms/programmers

programmers [C++] : 짝지어 제거하기

dev.wookii 2020. 6. 22. 18:19

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

 

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

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

programmers.co.kr

문제 설명


짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.

 

접근 방법


초기에는 스트링을 검색하면서 반복되는 문자가 보일 경우 erase를 사용하여 삭제하는 방식으로 코드를 작성했습니다.

하지만 효율성에서 통과하지 못했습니다 ㅠㅠ 그래서 고민하다가 stack으로 방향을 바꾸고 나서야 통과할 수 있었습니다~

 

코드


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

int solution(string s)
{
    stack<char>st;
    int Size=s.size();
    int k=0,answer=0;
    while(k!=Size){
        if(st.empty()){
            st.push(s[k]);
            k++;continue;
        }
        else if(st.top()==s[k]){
            st.pop();k++;continue;
        }
        else{
            st.push(s[k]);k++;continue;
        }
    }
    if(st.size()==0)return 1;
    else return 0;
}

funny algorithm 0_<