문제 : 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하여라!
제한조건
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
풀이 : 무리 없이 풀긴했는데.... 다른사람 풀이랑 비슷하지만 속도가 남다른 코딩을 찾아서 다시 공부 해야할것같다.
그래도 이번에 Thenby 라는 함수를 알게 되었다!
static string[] strings = { "abce", "abcd", "cdx" };
static int n = 2;
public static string[] solution(string[] strings, int n)
{
string[] answer = new string[] { };
Dictionary<string, string> dic = new Dictionary<string, string>();
for (int i = 0; i < strings.Length; i++)
dic.Add(strings[i], strings[i][n].ToString());
answer = dic.OrderBy(x => x.Value).ThenBy(y => y.Key).Select(x => x.Key).ToArray();
return answer;
}
풀이 : Array.Sort 사용 시 들어가는 인자를 string 배열과, Icompare 클래스 로 진행
에서 Icomparer<T> 를 상속받는 Class 를 만들고 Compare 및 정렬를 한번에 하는 코딩
static string[] strings = { "abce", "abcd", "cdx" };
static int n = 2;
public static string[] solution(string[] strings, int n)
{
Array.Sort(strings, new MyComparer(n));
return strings;
}
public class MyComparer : IComparer<string>
{
public int index;
public MyComparer(int argument)
{
index = argument;
}
public int Compare(string x, string y)
{
int retval = x[index].CompareTo(y[index]);
if (retval != 0)
{
return retval;
}
else
{
return x.CompareTo(y);
}
}
}
'알고리즘 > C#' 카테고리의 다른 글
[C#] 문자열 내림차순으로 배치하기 - 프로그래머스 (0) | 2020.10.13 |
---|---|
[C#] 3진법 뒤집기 - 프로그래머스 (0) | 2020.10.12 |
[C#] 두정수 사이의 합- 프로그래머스 (0) | 2020.10.10 |
[C#] 나누어 떨어지는 숫자 배열 - 프로그래머스 (0) | 2020.10.09 |
[C#] 가운데 글자 가져오기- 프로그래머스 (0) | 2020.10.08 |