프로그래머스 Lv2 - 짝지어 제거하기

2022. 11. 9. 13:37코딩테스트/프로그래머스

오늘도 아침 8시에 기상하여 2문제를 풀어보았다. 하지만 어제 급하게 이력서와 자소서를 쓰다보니 새벽 4시에 잠들어 
아침에 컨디션이 않좋은 상태로 문제를 풀려니 잘 풀리지가 않음.

 

문제링크

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

 

프로그래머스

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

programmers.co.kr

문제풀이

처음엔 문자를 처음부터 끝까지 순회하면서 

baabaa -> bb -> 성공

이런식으로 여러번 순회했다 . 그랬더니 효율성테스트에서 광탈을 함.

이후 stack을 써야한다는 걸 알게되고 stack을 사용해서 수정했음

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
#include <stack> //스택추가해줌
 
using namespace std;
 
int solution(string s)
{
    int answer = 0;
 
    stack<char> st;
    
    for(int i = 0 ; i< s.size();i++)
    {
        if(st.size() > 0 && st.top() == s[i]) 
//stack이 비어있지않고 문자가 같다면 st.pop()하여 st.top()의 데이터를 삭제
            st.pop();
        else
            st.push(s[i]); // 아닐경우 st에 추가해주었다
    }
   
    if(st.empty()) //비어있으면 성공
        answer = 1;
 
    return answer;
}
cs