자료구조, 코딩테스트/정렬(Sort)

[코딩테스트] Programmers - 문자열 내 마음대로 정렬하기 (실패)

RꞮbble 2026. 5. 23. 16:15

 

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

 

프로그래머스

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

programmers.co.kr

 

 

풀이1

문제는 쉽다. Linq 메서드를 사용해서 정렬하면 되겠는데, 문제는 Linq 메서드 사용방법을 잘 몰라서 못 풀겠다. 

 

 

풀이2

Gemini에게 문자열의 특정 인덱스를 기준으로 OrderBy 메서드 사용법을 물어봤다. 

문자열배열.OrderBy(문자열명 => 기준); 을 하면 "기준"을 기준으로 문자열 배열을 정렬해준다고 한다. 

 

그래서 strings.OrderBy(str => str[n])으로 정렬하여 answer 배열을 반환하도록 했다. 

 

 

코드1 - 오답

using System.Collections.Generic;
using System.Linq;

public class Solution {
    public string[] solution(string[] strings, int n) {
        string[] answer;
        
        answer = strings.OrderBy(str => str[n]).ToArray();
        
        return answer;
    }
}

인덱스의 문자가 같은 문자열일 경우, 사전순으로 정렬해야하는데 그렇지 않아서 오답이 나왔다. 

 

 

코드2 - 정답 

using System.Collections.Generic;
using System.Linq;

public class Solution {
    public string[] solution(string[] strings, int n) {
        string[] answer;
        
        answer = strings.OrderBy(str => str[n]).ThenBy(s => s).ToArray();
        
        return answer;
    }
}

ThenBy 메서드를 사용하면 앞선 정렬 이후 사전순으로 정렬할 수 있다고 한다.

 

 

풀이3

근데 생각해보니 OrderBy는 기본적으로 오름차순을 해준다. 

그러면 처음부터 오름차순으로 정렬하여 사전순 정렬을 해주고 그리고나서 인덱스n을 기준으로 OrderBy 정렬을 해주면 되지 않을까? 

 

 

코드3 - 정답

using System.Collections.Generic;
using System.Linq;

public class Solution {
    public string[] solution(string[] strings, int n) {
        string[] answer;
        
        // answer = strings.OrderBy(str => str[n]).ThenBy(s => s).ToArray();
        
        answer = strings.OrderBy(str1 => str1).OrderBy(str2 => str2[n]).ToArray();
        
        return answer;
    }
}

OrderBy로 사전순 정렬을 하고, OrderBy로 인덱스 n을 기준으로 정렬해주니 통과했다.