Dolphins의 HelloWorld

Programmers level1 문자열 내 마음대로 정렬하기 본문

Algorithm/Programmers 문제풀이

Programmers level1 문자열 내 마음대로 정렬하기

돌핀's 2018. 7. 12. 15:19



적당한 함수의 활용을 통해 적은 코드의 길이로 결과를 출력할 수 있는 문제이다.


문제를 읽어보면 vector에 있는 각 원소의 특정 인덱스를 비교하면서 정렬을 해야함을 알 수 있다. 고로 그냥 순수하게 정렬알고리즘을 구현하면 다음과같은 코드가 나온다.


#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;
    int len = strings.size();
    for (int i = 0; i < len-1; i++) {
        for (int j = i + 1; j < len; j++) {
            if (strings[i][n] > strings[j][n])
                swap(strings[i], strings[j]);
            else if (strings[i][n] == strings[j][n]) {
                if (strings[i] > strings[j]) swap(strings[i], strings[j]);
            }
        }
    }
    answer = strings;
    return answer;
}


sort 함수를 사용하면 적은 줄로도 이 문제를 손쉽게 풀 수 있다.


핵심은 sort함수를 사용하기에 앞서 적절한 비교함수를 따로 작성해주어야 한다는 점이다.


이 함수 또한 인덱스에 있는 문자가 같다면 사전순으로,


다르다면 오름차순으로 정렬되게끔 해서 쉽게 구현할 수 있다.


참고로 비교함수에서 < 로 return이 되면 오름차순,


> 로 return 되면 내림차순이라는 것만 알면 쉽게 작성해서 사용할 수 있다.


#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int i;

bool compare(string x, string y) {
    return x[i] == y[i] ? x < y : x[i] < y[i];
}
vector<string> solution(vector<string> strings, int n) {
    i = n;
    sort(strings.begin(),strings.end(),compare);
    return strings;
}
Comments