[프로그래머스] 문자열 내 마음대로 정렬하기

김유원·2024년 1월 30일
0

📝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를 정렬합니다.

[C#] 내가 작성한 풀이

인덱스의 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;
    }
}

남이 작성한 풀이 중 나의 풀이보다 나은 것은 없었다.

[C++] 내가, 남이 작성한 풀이

내 스스로 생각해내지 못해서 남의 풀이를 참고했다.

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;
}
profile
개발 공부 블로그

0개의 댓글

관련 채용 정보