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하는 코드도 있다

내 코드가 세상에서 제일 멍청하다