[프로그래머스 12906] 같은 숫자는 싫어
AlgorithmStack
- 출처: 프로그래머스 12906
- 분류: 스택/큐 · Lv.1
문제
0~9로 이루어진 배열 arr에서 연속으로 나타나는 같은 숫자를 하나만 남기고 제거하라. 원소 순서는 유지한다. [1,1,3,3,0,1,1] → [1,3,0,1].
핵심
직전 값과 다를 때만 결과에 넣는다. 스택 분류지만 스택 없이도 풀린다.
풀이
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
for (int x : arr)
if (answer.empty() || answer.back() != x)
answer.push_back(x);
return answer;
}
메모
answer.back(): 마지막에 넣은 값 = 직전 값. 이것과 현재 값이 다를 때만 추가하면 연속 중복이 제거된다.answer.empty()체크: 첫 원소는 비교 대상이 없으므로 빈 배열일 때는 무조건 추가해야 한다.||의 단축 평가로 empty일 때back()이 호출되지 않는다.unique+erase로도 가능하지만 원본 배열을 변경한다. 이 풀이는 새 벡터를 만들므로 원본을 건드리지 않는다.
복잡도
| 시간 | 공간 |
|---|---|
| O(N) | O(N) |