using System;
using System.Collections.Generic;
using System.Text;
// CapitalLetters for class names and methods, camelCase for variable names.
// Write your code clearly enough so that it doesn't need to be commented, or at least, so that it rarely needs to be commented.
namespace Testpad
{
public class BaekJoon15688
{
static void Main()
{
StringBuilder sb = new StringBuilder();
int n = int.Parse(Console.ReadLine()); // 주어지는 수의 개수
List<int> numbers = new List<int>(); // 수열
// 주어지는 수열을 받음
for (int i = 0; i < n; i++)
{
numbers.Add(int.Parse(Console.ReadLine()));
}
numbers.Sort();
foreach (var item in numbers)
{
sb.AppendLine(item.ToString());
}
// 정렬한 결과 출력
Console.Write(sb.ToString());
}
}
}
카운팅 정렬 (시간초과)
이 문제의 경우 수의 범위가 2백만이니, 충분히 빠를 거라 생각했는데 시간초과
using System;
using System.Text;
// CapitalLetters for class names and methods, camelCase for variable names.
// Write your code clearly enough so that it doesn't need to be commented, or at least, so that it rarely needs to be commented.
namespace Testpad
{
public class BaekJoon15688
{
static void Main()
{
StringBuilder sb = new StringBuilder();
int n = int.Parse(Console.ReadLine()); // 주어지는 수의 개수
int[] negative_Numbers = new int[1000001]; // -1000000이 1000000번 인덱스
int[] positive_Numbers = new int[1000001]; // 0이 0번, 1000000이 마지막 인덱스
// 주어지는 수열을 받음
for (int i = 0; i < n; i++)
{
// 수가 음수일 수 있으니, 분류함
int thisNumber = int.Parse(Console.ReadLine());
if (thisNumber >= 0)
{
positive_Numbers[thisNumber]++;
}
else
{
negative_Numbers[Math.Abs(thisNumber)]++;
}
}
// 음수
for (int i = 1000000; i >= 0; i--)
{
for (int j = 0; j < negative_Numbers[i]; j++)
{
sb.AppendLine($"-{i}");
}
}
// 양수
for (int i = 0; i <= 1000000; i++)
{
for (int j = 0; j < positive_Numbers[i]; j++)
{
sb.AppendLine(i.ToString());
}
}
// 정렬한 결과 출력
Console.Write(sb.ToString());
}
}
}
paraworld 3년 전
어떻게 해야 시간초과를 피할 수 있을지 모르겠습니다.
제가 정렬을 비효율적으로 한건지, 아니면 언어 자체의 한계인지 궁금합니다.
구글링해보니, c++은 내장 정렬함수 쓰면 끝이더라고요.
퀵정렬 (시간초과)
카운팅 정렬 (시간초과)
이 문제의 경우 수의 범위가 2백만이니, 충분히 빠를 거라 생각했는데 시간초과