Algorithm/프로그래머스
[프로그래머스/C++] 같은 숫자는 싫어
pinevienna
2021. 2. 16. 21:16
배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하여 반환하는 문제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
int cur = 0;
answer.push_back(arr[0]);
for (int i = 1; i < arr.size(); i++) {
if (answer[cur] != arr[i]) {
answer.push_back(arr[i]);
cur++;
}
}
return answer;
}
|
cs |
이렇게 풀어도 아주 짧고 쉽지만.. 개쩌는 코드가 있다
1
2
3
4
5
6
7
8
9
10
|
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr){
arr.erase(unique(arr.begin(), arr.end()), arr.end());
vector<int> answer = arr;
return answer;
}
|
cs |
unique 함수를 이용하여 이렇게 풀 수도 있다
먼저 unique로 연속적으로 나타나는 수들을 뒤로 보내고 그 부분을 erase하는 코드!
벡터를 저런식으로 선언할 수 있는 것도 뭔가 당연한데 첨 알았다ㅎ
참고한 링크
unique - C++ Reference
function template std::unique equality (1)template ForwardIterator unique (ForwardIterator first, ForwardIterator last); predicate (2)template ForwardIterator unique (ForwardIterator first, ForwardIterator last, BinaryPredicate pred); Remove co
www.cplusplus.com
이거 말고도 answer.back()과 arr[i]를 비교하여 다른 수만 push하는 코드도 있다
내 코드가 세상에서 제일 멍청하다