문 제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입 력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
10
5
2
3
1
4
2
3
5
1
7
출 력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
1
1
2
2
3
3
4
5
5
7
코 드
오답 노트
결론 : 시간 초과.. StreamWriter, StringBuilder, Console.WriteLine() 의 소요 시간을 알 수 있었던 문제! 출력 속도 비교 : https://www.acmicpc.net/blog/view/57
using System;
using static System.Console;
using System.IO;
namespace Algorithm
{
class Program
{
static void Main(string[] args)
{
int N = int.Parse(ReadLine());
int[] arrNum = new int[10001];
for (int i = 0; i < N; i++)
{
int insertNum = int.Parse(ReadLine());
arrNum[insertNum] += 1;
}
for (int i = 0; i < N; i++)
{
if (arrNum[i] == 0)
continue;
for (int j = 0; j < arrNum[i]; j++)
WriteLine(i);
}
}
}
}
비교코드 - 1
Console.WriteLine(), StringBuilder 모두 시간 초과.. 해서 나온 해결책이 StreamWriter 로 숫자 출력!
using System;
namespace Algorithm
{
class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
int[] arrNum = new int[10001];
for (int i = 0; i < N; i++)
{
int temp = int.Parse(Console.ReadLine());
arrNum[temp]++;
}
using (var print = new System.IO.StreamWriter(Console.OpenStandardOutput()))
{//카운팅 된 숫자를 출력
for (int i = 0; i <= 10000; i++)
{
if (arrNum[i] == 0)
continue;
for (int j = 0; j < arrNum[i]; j++)
{
print.WriteLine(i);
}
}
}
}
}
}
공 부
평균 (초)
- StreamWriter : 3.0959
- StringBuilder : 3.8562
- Console.WriteLine(i) : 30.1438 -> 소요 시간이 제일 길다..