https://school.programmers.co.kr/learn/courses/30/lessons/12973
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결 과정
착안
문자를 짝끼리 비교하여 같은 문자면 지우는 과정을 반복하면, 지워지는 문자가 있을 때 처음부터 다시 과정을 반복해야하므로 시간 복잡도 측면에서 매우 비효율적이다. 따라서, 스택(stack) 자료 구조의 후입선출(LIFO) 원리를 활용해 문제를 해결한다.
구현
주어진 문자열에 대해 앞에서부터 문자 하나씩 잘라서, 현재 스택의 top과 비교해 두 문자가 같으면 문자 하나를 스택에서 꺼내고 그렇지 않다면 스택에 자른 문자를 넣는 과정을 반복한다.
문자열의 끝까지 위 과정을 반복했을 때, 스택이 비어있다면 짝지어 제거 가능한 문자열이고 그렇지 않다면 남는 문자열이 있는 경우이다.
[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~
더보기
#include <string>
#include <stack>
using namespace std;
int solution(string s)
{
if (s.size() % 2)
return 0;
stack<char> words;
for (char c : s)
{
if (!words.empty() && words.top() == c)
words.pop();
else
words.push(c);
}
return words.empty();
}
실행 결과
'C++ 코딩 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[Programmers] 할인 행사 (0) | 2024.01.01 |
---|---|
[Programmers] 연속 부분 수열 합의 개수 (0) | 2023.12.31 |
[Programmers] 최댓값과 최솟값 (0) | 2023.12.28 |
[Programmers] 구명보트 (1) | 2023.12.23 |
[Programmers] 배달 (1) | 2023.12.21 |
댓글