목차
백준 단계별로 풀어보기
25.10.20
13단계: 정렬
1427번: 소트인사이드
문제 링크 : https://www.acmicpc.net/problem/1427
문제 풀이
: StreamReader, StreamWriter를 활용하여 입출력 처리 속도를 높였으며, 계수 정렬 방식을 활용하여 내림차순으로 정렬하였다.
- StreamReader와 StreamWriter를 사용하기 위해 System.IO 를 선언하고, 각각 sr, sw로 만든다.
- StreamReader를 통해 입력값을 받아 문자열 input 에 담고, 내림차순으로 정렬된 수를 담을 int형 배열 arr 를 초기화하고, 0부터 9까지 입력값에 대해 개수를 담을 int형 배열 count 를 초기화한다.
- for 반복문을 통해 문자열 input 에 대하여 각 문자값에 대응하는 위치(index)의 개수를 증가시킨다.
- 이때, input[i] 값은 char 타입이기 때문에 그대로 index로 활용했다가는 아스키 코드에 따라 해당하는 문자에 대응하는 int값으로 들어간다. --> 아스키 코드 표에 따라 input[i]에서 '0' 즉, 48을 빼주면 각 숫자로 변환된다.
- index를 담을 변수를 초기화하고, for 반복문을 통해 9부터 0까지 (내림차순) 반복하며 count 에 담긴 개수만큼 arr 에 담는다.
- foreach 문을 통해 내림차순으로 정렬된 배열 arr 를 StreamWriter를 통해 줄바꿈 없이 출력한다.
※ 참고
>> 문자열의 문자값을 index로 활용할 때, 해결법 2가지
- 문자값을 아스키 코드에 따라 적절한 값으로 빼서 해결 : 가장 빠르고 효율적이다.
- 문자값을 일일이 int.Parse()를 통해 int값으로 변환하여 해결 : 직관적이라는 장점이 있지만, 변환 비용이 있다.
for (int i = 0; i < input.Length; i++)
{
int temp = int.Parse(input[i].ToString());
count[temp]++;
}
--> 2번 방식의 코드
→ 직관적인 것이 중요하다면 2번 방식을 사용했겠지만, 문제를 풀 땐 효율이 더 중요하다고 생각해서 1번 방식을 사용했다.
>> 아스키 코드 표

정답 코드
using System.IO;
class Backjoon
{
static void Main(string[] args)
{
using var sr = new StreamReader(Console.OpenStandardInput());
using var sw = new StreamWriter(Console.OpenStandardOutput());
string input = sr.ReadLine();
int[] arr = new int[input.Length];
int[] count = new int[10];
for (int i = 0; i < input.Length; i++)
{
count[input[i] - '0']++;
}
int index = 0;
for (int i = 9; i >= 0; i--)
{
while (count[i] > 0)
{
arr[index++] = i;
count[i]--;
}
}
foreach (var t in arr)
{
sw.Write(t);
}
}
}'Development > Baekjoon' 카테고리의 다른 글
| [C#] 11651번: 좌표 정렬하기 2 (0) | 2025.10.24 |
|---|---|
| [C#] 11650번: 좌표 정렬하기 (0) | 2025.10.23 |
| [C#] 10989번: 수 정렬하기 3 (0) | 2025.10.19 |
| [C#] 2751번: 수 정렬하기 2 (0) | 2025.10.18 |
| [C#] 25305번: 커트라인 (0) | 2025.10.17 |