알고리즘 문제 풀이/백준

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

Ardmos :) 2023. 10. 24. 18:27

배운 점:

실수한 점: 음수를 포함한 숫자가 주어지는 문제인데 제대로 안읽어서 왜 안되는건가 헤맸다 😅😅

 

using System;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 입력받을 숫자의 개수 n 입력 받기
            int n = int.Parse(Console.ReadLine());
            int answer = 0;
            int MAX_NUM = 1000000;
            // 주어질 숫자는 -1,000,000 ~ 1,000,000
            // 음수 전담 배열
            int[] negativeNumArray = new int[MAX_NUM + 1];
            // 양수 전담 배열
            int[] positiveNumArray = new int[MAX_NUM + 1];


            // 주어진 숫자가 각각 몇 개씩 있는지 array에 카운팅. 
            // 편의상 0은 positiveNumArray에 포함
            for (int i = 0; i < n; i++)
            {
                int inputNum = int.Parse(Console.ReadLine());
                if(inputNum >= 0) {
                    positiveNumArray[inputNum]++;
                }
                else if(inputNum < 0)
                {
                    negativeNumArray[inputNum*-1]++;
                }
            }

            // Console.WriteLine()을 쓰면 시간초과가 나서, 더 빠른 StreamWriter를 사용해 출력한다 
            using (var print = new System.IO.StreamWriter(Console.OpenStandardOutput()))
            {
                // 음수 영역 먼저 출력. 내림차순 해야하고, 출력시 -1 곱해야함
                for(int targetNum = MAX_NUM; targetNum > 0; targetNum--)
                {
                    if (negativeNumArray[targetNum] == 0) continue;

                    for (int j = 0; j < negativeNumArray[targetNum]; j++)
                    {
                        answer = targetNum * -1;
                        print.WriteLine(answer);
                    }
                }

                // 0과 양수 영역 출력. 출력시 오름차순
                for (int targetNum = 0; targetNum <= MAX_NUM; targetNum++)
                {
                    if (positiveNumArray[targetNum] == 0) continue;

                    for (int j = 0; j < positiveNumArray[targetNum]; j++)
                    {
                        answer = targetNum;
                        print.WriteLine(answer);
                    }
                }
            }
        }
    }
}
728x90