12973. 짝지어 제거하기
2025-12-01
프로그래머스 12973번 풀이
이 글은 Obsidian에서 마이그레이션되었으며, 그 과정에서 AI의 도움을 받았습니다. 오류나 누락된 내용이 있다면 댓글로 알려주세요!
문제
코딩테스트 연습 - 짝지어 제거하기 | 프로그래머스 스쿨
풀이
아이디어
어렵게 생각하지 말자… 적절한 비유인지 모르겠는데, 버블정렬마냥 짝을 계속 옮겨가면서 제거해야겠다고 생각하고 처음 접근했었다. 그래서 스택을 두개 써서 두 스택을 옮겨다니며 제거를 했었는데 시간초과가 났었다. (그럴만도 함 문자열 길이가 1,000,000인데 O(N²) 접근을 시도한 것…)
다시 생각해보니 문자열을 한번만 순회하면서, 자신의 앞 원소만 바라보며 당장 제거할 수 있다면 제거하고, 아니면 스택에 넣어서 뒤 원소한테 운명을 맡기는 방법으로 간단히 해결할 수 있었다.
코드
function solution(s) {
const stack = [];
for (const c of s) {
if (stack.length === 0) {
stack.push(c);
continue;
}
const top = stack[stack.length - 1];
if (c === top) {
stack.pop();
} else {
stack.push(c);
}
}
return stack.length === 0 ? 1 : 0;
}