[C++] 백준 10867 : 중복 빼고 정렬하기

Kim Nahyeong·2022년 1월 7일
0

백준

목록 보기
41/157

#include <iostream>
#include <vector>
#include <algorithm> // std::unique <- 벡터의 중복 요소 삭제
using namespace std;

int main(int argc, char **argv){
    int N;
    scanf("%d",&N);
    vector<int> v(N); // N개의 벡터 생성 -> segfault

    for(int i=0; i<N; i++){
        scanf("%d",&v[i]);
    }
    sort(v.begin(), v.end()); // 정렬 먼저 해줘야함.
    v.erase(unique(v.begin(), v.end()), v.end());
    // 중복 원소를 vector의 제일 뒷부분 쓰레기 값으로 보냄 -> 이 뒷부분 erase로 삭제
    // unique 함수는 앞과 뒤 원소를 비교하기 때문에 무조건 먼저 정렬을 해줘야한다.

    for(int i = 0; i < v.size(); i++){
        printf("%d ",v[i]);
    }

    return 0;
}

오늘의 키포인트

  • STL 사용 연습 문제. vector, sort, erase, unique를 사용하였다.

  • 주석에도 작성하였지만, 중복되는 것을 삭제하고 정렬하려면 먼저 정렬을 한 뒤 unique를 사용하여 중복되는 것을 맨 뒷부분 쓰레기 값으로 보내고, 해당 위치부터 맨 뒤까지 erase를 이용하여 삭제해주어야한다. 처음에 sort를 먼저 안했는데 삭제가 안되기에 의아했는데 unique 함수는 앞과 뒤 원소를 비교하기 때문에 무조건 먼저 정렬을 해줘야한다.

0개의 댓글