문 제

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 -> 소요 시간이 제일 길다..