본문 바로가기

컴퓨터&프로그래밍/Baekjoon

[백준/C#] 2751 - 수 정렬하기 2

1. 문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

 

입력 - 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

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

출력 - 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

 

* 시간 복잡도가 O(nlogn)인 정렬 알고리즘으로 풀 수 있습니다. 예를 들면 병합 정렬, 힙 정렬 등이 있지만, 어려운 알고리즘이므로 지금은 언어에 내장된 정렬 함수를 쓰는 것을 추천드립니다.

예제 입력 예제 출력
5
5
4
3
2
1
1
2
3
4
5

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

 

2751번: 수 정렬하기 2

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

www.acmicpc.net


2. 풀이

내장함수 쓸 것을 추천한다길래 그대로 했더니 시간 초과가 떴다. 

내장 함수가 시간이 오래 걸리는 정렬법을 쓴 건가 싶어서 Array.Sort 메서드 설명도 읽어봤지만 아닌 것 같았다.

https://learn.microsoft.com/ko-kr/dotnet/api/system.array.sort?view=net-7.0

그래서 찾아보니 정렬이 문제가 아니라, 반복문에서 Console.WriteLine()으로 배열 내용물을 하나하나 출력하던 게 문제였다.

그래서 string.Join()으로 배열 안의 모든 숫자들을 한 문자열로 합치고 한번에 출력해서 해결했다.

// 수 정렬하기
int N = int.Parse(Console.ReadLine());
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
    arr[i] = int.Parse(Console.ReadLine());                
}

// 정렬
Array.Sort(arr);

// 출력
string result = string.Join("\n", arr);
Console.WriteLine(result);

3. 배운 점

문자열 배열 출력할때는 string.Join을 활용하자.



Calendar
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Visits
Today
Yesterday