안녕 세상아,

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

프로그래머스

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

돈 많은 백수가 되고싶다 2024. 8. 30. 18:53

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

stack을 사용하여 stk.top과 현재 s[i]값을 비교하여 풀면 간단하게 풀 수있다. 

다만, 주의해야할 예외가 있는데 stk가 empty일 수 있기 때문에 예외처리를 잘 해야한다. 

 

1. stk 스택을 선언한다. 

2. for문을 돌리면서 stk.top()과 s[i]의 값을 비교한다. 

3. stk.empty()가 아닐 때만 진행한다.  

4. 만약 stk.top()과 s[i]가 같으면 stk.pop()을 해주며 진행한다. 

5. 최종적으로 stk가 비어있으면 answer에 1, 비어있지 않으면 answer에 0을 넣는다. 

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

int solution(string s)
{
    int answer = -1;

    stack<char>stk;

    for (int i = 0; i < s.size(); i++) {
        if (!stk.empty() && stk.top() == s[i])
            stk.pop();
        else
            stk.push(s[i]);
    }
    if (stk.empty())
        answer = 1;
    else
        answer = 0;
    return answer;
}

 

if문에서 실수가 있었다. 아니 분명 맞는 것 같은데 자꾸 틀리길래...왜인가 했는데 단락평가라는 것이 있더라고요? 그래서 따로 정리해봤다. 

https://hello-world-cpp.tistory.com/141