백준 온라인 코딩 문제풀이
Baekjoon Online Judge
Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.
www.acmicpc.net
코드 참고
wny0320 (박 상운)
Run code live in your browser. Write and run code in 50+ languages online with Replit, a powerful IDE, compiler, & interpreter.
replit.com
2751번에 대해 다룸
2751
수 정렬하기 2
똑같이 List를 사용하여 Sort를 사용하면 되는 문제이나 똑같이 작성하게 된다면 필자와 같은 오류에 마주하게 됨
리스트에 항목을 넣는 것은 insert가 아니라 Add로 넣기 때문에 시간 복잡도는 상수항임 O(1)
그리고 보통의 정렬 메소드는 퀵정렬로 이루어져 있어 정렬에도 시간의 문제가 없음
따라서 해결해야하는 문제는 입력과 출력이라고 유추할 수 있음
따라서 WriteLine()보다 성능이 좋은 Write("/n")을 이용해보았지만 마찬가지로 시간 초과가 뜸
그래서 필자는 StringBuilder를 사용하였음
string 같은 경우에는 문자가 하나 추가되거나 삭제되었을 때 나타나는 새로운 문자가 새롭게 메모리를 사용하기 때문에 성능이 매우 좋지 않음
StringBuilder와 같은 경우는 문자를 추가하거나 삭제해도 성능이 크게 바뀌지 않아 사용됨
using System;
using System.Collections.Generic;
using System.Text;
class Program
{
static void Main(string[] args)
{
int input = int.Parse(Console.ReadLine());
List<int> num = new List<int>();
StringBuilder result = new StringBuilder();
for (int i = 0; i < input; i++)
{
num.Add(int.Parse(Console.ReadLine()));
}
num.Sort();
for (int i = 0; i < input; i++)
{
result.Append(num[i] + "\n");
}
Console.Write(result);
}
}
위와 같이 코드를 작성하게 된다면 마지막 Write로 해당 StringBuilder의 내용이 전부 하나의 문자열로 출력됨
따라서 Write나 WriteLine을 여러번하는 것보다 성능이 향상됨
'BaekJoon[C#]' 카테고리의 다른 글
백준 24313 알고리즘 수업 - 점근적 표기 (0) | 2023.12.06 |
---|---|
백준 10988, 9506 (0) | 2023.12.05 |
정렬 단계 25305 (0) | 2022.12.26 |
정렬 단계 2587 (0) | 2022.12.25 |
정렬 단계 2750 (0) | 2022.12.24 |