📝24.01.33
🔗 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12915?language=csharp
문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
인덱스의 n번째 글자를 기준으로 정렬한다는 것을 보자마자 Linq의 OrderBy
를 활용하면 되겠구나라는 생각을 했다. 하지만 그 외의 기준, 즉 n
번째 인덱스가 같은 경우에는 사전순으로 정렬한다는 조건을 충족해야 했다.
그래서 알게된 것이 ThenBy
이다. OrderBy
조건 이후의 2번째 정렬 조건을 사용할 때 쓰는 것으로 하단의 코드에서도 단순 사전순 정렬이라는 이야기로 ThenBy(str => str)
을 사용했다.
using System.Linq;
public class Solution {
public string[] solution(string[] strings, int n) {
string[] answer = new string[strings.Length];
answer = strings.OrderBy(str => str[n]).ThenBy(str => str).ToArray();
return answer;
}
}
남이 작성한 풀이 중 나의 풀이보다 나은 것은 없었다.
내 스스로 생각해내지 못해서 남의 풀이를 참고했다.
sort()
함수에 compare()
함수를 적절히 수정하는 방법으로 정렬할 수 있었다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int i;
bool compare(string a, string b) {
return a[i] == b[i] ? a < b : a[i] < b[i];
}
vector<string> solution(vector<string> strings, int n) {
i = n;
sort(strings.begin(), strings.end(), compare);
return strings;
}