본문 바로가기
C

[C]백준 12.정렬: 2750

by 열지희공 2022. 1. 21.

백준2750

내코드 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int n;
	scanf("%d", &n);
	int arr[1001];
	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}
	int temp;
	for (int i = 0; i < n - 1; i++) {
		for (int j = i + 1; j < n; j++) {
			if (arr[i] > arr[j]) {
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
	for (int i = 0; i < n; i++) {
		printf("%d\n", arr[i]);
	}
	return 0;
}

정렬 단계에 수 정렬하기 문제는 총 3문제이다. 3문제 모두 오름차순으로 정렬하는 문제이지만 문제의 조건이 다 다르기 때문에 주의해야한다. 

 

문제 설명에서 "시간 복잡도가 O(n²)인 정렬 알고리즘으로 풀 수 있습니다. 예를 들면 삽입 정렬, 거품 정렬 등이 있습니다." 이렇게 나와있길래 사실 바로 버블 정렬로 풀었지만 왜 시간복잡도가 O(n^2)인 정렬 알고리즘으로 풀 수 있는지 고민해 봤다.

 

수 정렬하기 중 첫번째인 이 문제의 조건을 살펴보면 정렬해야 하는 수의 개수가 1<=N<=1,000 이라는 조건을 갖고, 시간제한은 1초, 메모리 제한은 128MB이다. 

잘 알려진 정렬 방법인 버블정렬, 삽입정렬의 시간 복잡도는 O(n^2)이다. 버블정렬, 삽입정렬을 이용하면 최대 약 1,000,000번의 연산을 하고, 1초에 약 1~2억번 연산을 한다고 가정했을 때 1초를 넘기지 않으므로 시간적 측면에서 버블정렬, 삽입정렬은 가능하다.

또한 버블정렬과 삽입정렬은 코드에서 크기가 N인 int형(4바이트) 일차원 배열을 사용하기 때문에 N이 최대 1000이라면 4000바이트를 사용하게 되므로 메모리 측면에서도 문제가 없다. 

 

<참고 링크>

https://syh39.github.io/algorithm/algorithm_2/#%EC%B6%9C%EC%B2%98

 

백준 시간제한과 메모리제한

시간 제한

syh39.github.io

 

'C' 카테고리의 다른 글

[C]백준 12.정렬: 10989  (0) 2022.01.21
[C]백준 12.정렬: 2751  (0) 2022.01.21
[C]백준 11.브루트포스: 1436  (0) 2022.01.20
[C]백준 11.브루트포스: 1018  (0) 2022.01.20
[C]백준 11.브루트포스: 7568  (0) 2022.01.20