Programmers_짝지어 제거하기

😑 처음에는 문자열 함수 erase를 사용해서 풀려 했는 stack을 사용하면 훨씬 훨씬 쉽게 풀수 있을 것이라 판단하여 풀려는 방식을 바꿨음.

  • 나와 다음 글자가 같을 시 : 제거
  • 나와 다음 글자가 다를 시 : 삽입
  • 위의 방식이 기본 방식이다. 어차피 2개의 값을 비교하는 작업이기 때문에 stack.top() 값과 새로운 string 값을 비교해주고 위처럼 실행시키면 된다.
  • 마지막 나온 값에서 stack의 크기에 따라 answer 값을 정해주면 된다.
#include <iostream>
#include <string>
#include <stack>
using namespace std;

int solution(string s)
{
    int answer = 0;
    stack <char> con; //값을 저장해 줄 stack

    for(int i=0;i < s.size();i++)
    {
        if(!con.empty() && con.top() == s[i]) con.pop(); // stack의 top()을 사용하기 위해서는 거의 많은 상황에서 empty()의 가능성을 살펴보고 참조해야 함.
        else con.push(s[i]); // 가장 마지막 값과 s[i]가 다를시에는 s[i]의 값을 없애줄 필요가 없으므로 push
    }
    if(con.size() == 0) answer = 1; // answer의 초깃값이 0이므로 그에 대한 상황은 생략.

    return answer;
}

재밌다. 알고리즘은 재밌다.

좋은 웹페이지 즐겨찾기