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을 기준으로 정렬해주니 통과했다.
'자료구조, 코딩테스트 > 정렬(Sort)' 카테고리의 다른 글
| [코딩테스트] Programmers - 문자열 정렬하기 2 (성공) (0) | 2026.05.23 |
|---|---|
| [코딩테스트] Programmers - 가장 큰 수 (실패) (0) | 2026.05.22 |
| [코딩테스트] Programmers - K번째수 (실패) (0) | 2026.05.02 |
| [자료구조] Radix Sort (0) | 2026.05.02 |
| [자료구조] Counting Sort (0) | 2026.05.01 |