Coding Test/Programmers
[Lv.0] 문자열 정렬하기 (1) [프로그래머스_코딩테스트] [문자열, 정렬] [15분]
whawoo
2025. 6. 16. 18:35
반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/120850
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문자열 영어 소문자와 숫자로 이루어진 my_string이 주어지고 해당 문자열에 들어 있는 숫자들을 오름차순으로 정렬해서 반환하는 문제
🧠 나의 접근 방식과 시행착오
약 5분 정도 걸린 문제. 간단하게 문자열 안의 char를 순회하면서 0~9인 경우에 List<int>에 넣고 정렬시켰다. 넣을 때 c - '0'처럼 해서 int로 바꾸는 것도 실수 하지 않기.
/// <summary>
/// 문자열 정렬하기 (1)
/// https://school.programmers.co.kr/learn/courses/30/lessons/120850
/// </summary>
public int[] solution(string my_string)
{
var numList = new List<int>();
foreach (var c in my_string)
{
if (c >= '0' && c <= '9')
{
numList.Add(c - '0');
}
}
numList.Sort();
return numList.ToArray();
}
✅ 풀이 코드
Linq를 이용하여 한 줄로 해결하는 방법도 있으나 개인적으로 최적화나 그런 면에서 별로 좋아하는 것이 아니어서 해당 피드백은 크게 신경 쓰지 않기로 하였다. 추가로 0~9까지를 체크하는 것에선 char.IsDigit(c)라는 편의 함수가 있으니 이걸 이용하는 것이 좀 더 의미 전달에도 확실하다는 생각이 든다.
if (char.IsDigit(c)) numList.Add(c - '0');
내부의 구현은 이런 식으로 생겼다.
/*=================================IsDigit======================================
**A wrapper for char. Returns a boolean indicating whether **
**character c is considered to be a digit. **
==============================================================================*/
// Determines whether a character is a digit.
public static bool IsDigit(char c)
{
if (IsLatin1(c))
{
return IsBetween(c, '0', '9');
}
return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
}
🔄 정리
char.IsDigit에 대해서 기억해두고 써먹을 수 있을 경우 사용해보자
반응형