Coding Test/Programmers

[Lv.1] 문자열 내 마음대로 정렬하기 [프로그래머스_코딩테스트] [문자열] [25분]

whawoo 2025. 6. 13. 08:47
반응형

🔍 문제 요약

https://school.programmers.co.kr/learn/courses/30/lessons/12915

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

strings라는 문자열 배열이 주어지고 n번째 인덱스의 char값을 기준으로 오름차순 정렬을 한 결과를 반환. (동일한 경우 문자열끼리 비교)

🧠 나의 접근 방식과 시행착오

20분 정도 걸린 문제. 처음에는 좀 더 복잡한 방식을 생각했었다가 Array.Sort로 바로 문젤르 해결할 수 있을 것으로 보여서 진행. 결국 n번째 캐릭터가 같은 경우와 다른 경우로 나누어서 구분하면 된다.

using System;
using System.Collections.Generic;
using System.Text;

public class Solution
{
    /// <summary>
    /// 문자열 내 마음대로 정렬하기
    /// https://school.programmers.co.kr/learn/courses/30/lessons/12915
    /// </summary>
    public string[] solution(string[] strings, int n)
    {
        // 동일한 경우 사전순으로 앞선 것을 앞으로 두기 위함
        Array.Sort(strings, (a, b) => a[n] == b[n] ? String.Compare(a, b, StringComparison.Ordinal) : a[n].CompareTo(b[n]));

        return strings;
    }
}

/// <summary>
/// C# 7.3
/// </summary>
internal class Program
{
    public static void Main(string[] args)
    {
        var sl = new Solution();
        var strings1 = new[] { "sun", "bed", "car" };
        int n1 = 1;
        var res1 = sl.solution(strings1, n1);
        var strings2 = new[] { "abce", "abcd", "cdx" };
        int n2 = 2;
        var res2 = sl.solution(strings2, n2);

        foreach (var res in res1)
        {
            Console.Write(res + ", ");
        }
        
        Console.WriteLine();

        foreach (var res in res2)
        {
            Console.Write(res + ", ");
        }
    }
}

✅ 풀이 코드

조금 더 Array.Sort의 내부를 가독성 좋게 피드백을 한 버젼.

Array.Sort(strings, (a, b) =>
{
    int charCompare = a[n].CompareTo(b[n]);
    return charCompare != 0 ? charCompare : string.Compare(a, b, StringComparison.Ordinal);
});

🔄 정리

Array.Sort 사용에 대해서는 숙지해두면 유용.

반응형