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을 활용하자.
'컴퓨터&프로그래밍 > Baekjoon' 카테고리의 다른 글
[백준/C#] 11650, 11651 - 좌표 정렬하기 1, 2 (0) | 2023.10.24 |
---|---|
[백준/C#] 10989 - 수 정렬하기 3 (0) | 2023.10.23 |
[C#] 2389 - 설탕 배달 (0) | 2023.10.20 |
[C#] 1436 - 영화감독 (0) | 2023.10.19 |
[C#] 1018 - 체스판 다시 칠하기 (0) | 2023.10.18 |