[ BOJ / C++ ] 10867번 중복 빼고 정렬하기

황승환·2021년 10월 24일
0

C++

목록 보기
61/65

이번 문제는 STL의 sort함수를 사용하여 해결하였다.

  • 중복을 제거하는 방법으로 bool형 배열을 사용한다. n을 입력 받았다면 chk[n]은 true가 되고, 새로 입력받은 m에 대한 chk[m]이 true라면 배열에 넣지 않는다.
  • 배열에 추가하기 편하도록 배열은 vector를 사용한다.
  • 중복을 제거한 vector를 sort로 정렬한다.

이렇게 제출하였더니 오답처리 당했다. 문제를 다시 읽어보니 입력되는 수가 정수이기 때문에 음수도 가능하다는 것을 알았다.

  • 음수의 중복을 확인하기 위해 mchk라는 bool형 배열을 만들고, 중복 체크에 사용되는 인덱스는 (-1)*n을 사용한다.

Code

#include <iostream>
#include <algorithm>
#include <vector>
#define MAX 100001
#define CHKMAX 1001
using namespace std;

int n;
vector<int> arr;
bool chk[CHKMAX]={false};
bool mchk[CHKMAX]={false};

void Input(){
    cin>>n;
    for(int i=0; i<n; i++){
        int a;
        cin>>a;
        if(a>=0){
            if(!chk[a]){
                arr.push_back(a);
                chk[a]=true;
            }
        }
        else{
            if(!mchk[(-1)*a]){
                arr.push_back(a);
                mchk[(-1)*a]=true;
            }
        }
    }
}

void Solution(){
    sort(arr.begin(), arr.end());
    for(int i=0; i<arr.size(); i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Input();
    Solution();
    return 0;
}

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글