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에 대해서 기억해두고 써먹을 수 있을 경우 사용해보자

반응형