공부 자료/알고리즘

(C/C++) 백준 11931번 - 수 정렬하기 4

뚜루뚜루세니 2021. 7. 9. 12:36
728x90

문제출처:https://www.acmicpc.net/problem/11931

 

11931번: 수 정렬하기 4

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

www.acmicpc.net

 

1. 코드

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

int arr[1000001];

bool compare(int a, int b) {
	return a > b;
}

int main() {
	int num;
	scanf("%d", &num);

	for (int i = 0; i < num; i++) {
		scanf("%d", &arr[i]);
	}

	//내림차순 정렬
	reverse(arr, arr + num);
	sort(arr, arr + num, compare);

	for (int i = 0; i < num; i++) {
		printf("%d\n", arr[i]);
	}

	return 0;
}

2. 해결과정

처음에 버블 정렬을 이용하려고 했는데 무슨 이유인지 모르게 계속 시간 초과가 나서 그냥 sort함수를 사용했다.

sort(시작 범위, 끝범위); 함수를 이용하면 두 개의 접근 반복자로 지정된 모든 범위의 요소를 비교해서 오름차순으로 정렬하게 된다.

하지만 지금 원하는건 내림차순이기 때문에 compare라는 함수를 선언해서 sort의 세번째 인자로 전달을 해준다. reverse(시작 범위, 끝범위); 는 전달 받은 범위 사이의 순차 구조의 순서를 바꿔주는 함수이다.

따라서 reverse해주고 sort해주면 내림차순이 된다.

 

3. 느낀점

이미 지정된 함수를 사용하면 간단하기는 하지만 사용범위나 방법을 계속 생각하는 것도 생각보다 까다롭고 어려운것 같다. 자주 사용해서 익숙해지는 것이 좋을 것같다.

728x90