본문 바로가기

코딩테스트/C++

백준 정렬 알고리즘 10989번 C++

 

 

처음으로 이 문제를 봤을 때 int* arr = new int[N] 으로 동적할당을 받거나 vector를 쓸 생각을 해서 아래와 같이 작성했었다.

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

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N;
	cin >> N;
	int num;
	int* arr = new int[N];
	for (int i = 0; i < N; i++) {
		cin >> num;
		arr[i] = num;
	}
	sort(arr, arr + N);
	for (int i = 0; i < N; i++) {
		cout << arr[i];
	}
	delete arr;
}
#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N;
	cin >> N;
	int num;
	vector<int> a;
	for (int i = 0; i < N; i++) {
		cin >> num;
		a.push_back(num);
	}
	sort(a.begin(), a.end());
	for (int i = 0; i < N; i++) {
		cout << a[i] << '\n';
	}
}

 

하지만 잘 안 되길래 아래와 같은 방법을 써보았다.

#include <iostream>
using namespace std;

int main() {

	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N;
	cin >> N;
	int arr[10001] = { 0 };
	for (int i = 0; i < N; i++) {
		int num;
		cin >> num;
		arr[num] += 1;
	}
	for (int i = 1; i < 10001; i++) {
		for (int j = 0; j < arr[i]; j++) {
			cout << i << '\n';
		}
	}
    // 여기서 delete arr을 쓸 수 없는 이유는 동적할당을 한게 아니기 때문이다.
}