본문 바로가기
Problem Solving

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

by tls1107 2021. 7. 26.
728x90
반응형


문제 풀기 전 생각 : 

/*
중복을 허용하지 않고 정렬을 자동으로 해주는
컨테이너인 세트 컨테이너를 사용하면 쉽게 풀 수 있다
*/

#include <iostream>
#include <set>
using namespace std;

int main() {
  set<int> s;
  int n,tmp;
  cin >> n;
  for(int i=0 ; i<n ; i++){
    cin >> tmp;
    s.insert(tmp);
  }
  for (typename std::set<int>::iterator itr = s.begin(); itr != s.end(); ++itr) {
    cout << *itr << " ";
  }
  return 0;
}

https://www.acmicpc.net/problem/10867

 

10867번: 중복 빼고 정렬하기

첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다.

www.acmicpc.net


풀 때 어려웠던 점 또는 느낀점 :

 

세트 컨테이너와 조금 더 친해질 수 있었다


개선방안 :

#include<bits/stdc++.h>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	bool histo[2001] = {false, };

	for (int i = 0; i < N; i++)
	{
		int n;
		cin >> n;
		histo[n + 1000] = true;
	}

	for (int i = 0; i <= 2000; i++)
	{
		if (histo[i])
		{
			cout << i - 1000 << " ";
		}
	}

	return 0;
}

2001칸 짜리 bool 타입 배열을 만든다.

그리고 해당 숫자가 나왔을때 해당 칸을 true 로 만든다.

배열의 크기를 2001로 한 이유는 

입력되는 수의 절대값이 1000보다 작기 때문이다.

음수 또한 들어올 수 있다.

신박하다.

728x90
반응형

댓글