LV1_같은 숫자는 싫어(C++)

sonyrainy·2022년 7월 24일
0

프로그래머스_LV1

목록 보기
28/39

🚗문제 설명

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

🚓제한 조건

배열 arr의 크기 : 1,000,000 이하의 자연수
배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

🚕입출력 예시

🚐코드_1

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer;
    int j = 0;
    answer.push_back(arr[0]);
    
    for (int i = 1; i < arr.size(); i++) {
        if (arr[i] == answer[j]) {
            continue;
        } else {
            answer.push_back(arr[i]);
            j++;
        }
    }
    return answer;
}

🚐코드_2(unique(), erase())

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr) 
{
    vector<int> answer;
    arr.erase(unique(arr.begin(), arr.end()), arr.end());
    answer = arr;
    return answer;
}

  • unique()의 return 값은 중복되지 않는 원소의 마지막 원소 다음에 나오는 위치이다.

  • unique() 함수를 통해서, 중복된 원소를 중복되지 않는 원소로 만들어 나열할 수 있다. 대신 size()는 변하지 않으므로, 이는 erase()를 이용하여 조절한다.

  • ex) (1) → (2)

(1) 10 20 20 30 30 20 10 10
(2) 10 20 30 20 10 ?  ?  ?
profile
@sonyrainy

0개의 댓글