배운 점:
1. C#에서의 출력 속도 빠른 순서 :
1. StreamWriter
2. StringBuilder 사용 후 Console.Write
3. Console.WriteLine
실수한 점:
1. List를 사용해서 메모리 초과가 일어났다.
// List 사용 버전 (메모리 초과)
using System;
using System.Collections.Generic;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
// 정수 n 입력 받기
int n = int.Parse(Console.ReadLine());
int answer = 0;
List<int> list = new List<int>();
// 입력받을 숫자의 개수 n 입력 받기
for (int i = 0; i < n; i++)
{
list.Add(int.Parse(Console.ReadLine()));
}
// 오름차순 정렬
list.Sort();
// Console.WriteLine()을 쓰면 시간초과가 나서, 더 빠른 StreamWriter를 사용해 출력한다
using (var print = new System.IO.StreamWriter(Console.OpenStandardOutput()))
{
// 결과 출력
foreach (int i in list)
{
answer = i;
print.WriteLine(answer);
}
}
}
}
}
// 정답 통과버전
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 = 10000;
// 주어질 숫자는 1~10000 까지의 자연수. 이 배열의 index는 곧 주어진 숫자.
int[] totalNumArray = new int[MAX_NUM+1];
// 주어진 숫자가 각각 몇 개씩 있는지 array에 카운팅.
// 배열을 읽을 때 1부터 읽으면 따로 오름차순정렬 과정이 필요 없어짐.
for (int i = 0; i < n; i++)
{
totalNumArray[int.Parse(Console.ReadLine())]++;
}
// Console.WriteLine()을 쓰면 시간초과가 나서, 더 빠른 StreamWriter를 사용해 출력한다
using (var print = new System.IO.StreamWriter(Console.OpenStandardOutput()))
{
for (int targetNum = 0; targetNum <= MAX_NUM; targetNum++)
{
// 해당 자연수의 값이 0이면 예제에서 주어지지 않았다는 이야기. 무시 가능.
if (totalNumArray[targetNum] == 0) continue;
// 0이 아니라면 입력받은 횟수만큼 출력
for (int j = 0; j < totalNumArray[targetNum]; j++)
{
answer = targetNum;
print.WriteLine(answer);
}
}
}
}
}
}
*참고
https://www.acmicpc.net/blog/view/57
728x90
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[백준 1978번/C#] 소수 찾기 (0) | 2023.10.24 |
---|---|
[백준 2751번/C#] 수 정렬하기 2 (0) | 2023.10.24 |
[백준 10809번/C#] 알파벳 찾기 (0) | 2023.10.23 |
[백준 8958번/C#] OX퀴즈 (0) | 2023.10.23 |
[백준 2577번/C#] 숫자의 개수 (0) | 2023.10.23 |