Level 2. 짝지어 제거하기
첫 번째 문제는 정답을 맞으나 효율성 테스트에서 실패했다.
앞에서부터 같은 두 개의 문자를 찾아 제거하며 반복하는 방식이다.
최악의 경우 O(n²)이 소요되기 때문인 것 같다.
#include <iostream>
using namespace std;
int solution(string s)
{
auto find_pair = [](string& s) -> size_t
{
size_t len = s.length() - 1;
for (int i = 0; i < len; ++i)
if (s[i] == s[i + 1])
return i;
return string::npos;
};
s += '0';
for (size_t pos = find_pair(s); pos != string::npos; pos = find_pair(s))
s.erase(pos, 2);
return (s == "0");
}
생각해보니 괄호 짝 맞추기처럼 스택을 활용하면 효율적으로 간단하게 풀 수 있는 문제였다.
#include <iostream>
#include <stack>
using namespace std;
int solution(string s)
{
stack<char> stck;
for (char c : s)
if (!stck.empty() && stck.top() == c)
stck.pop();
else
stck.emplace(c);
return stck.empty();
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2. 쿼드압축 후 개수 세기 (0) | 2023.03.28 |
---|---|
Level 2. 방문 길이 (0) | 2023.03.27 |
Level 2. 영어 끝말잇기 (0) | 2023.03.25 |
Level 2. JadenCase 문자열 만들기 (0) | 2023.03.24 |
Level 2. 주차 요금 계산 (0) | 2023.03.23 |