#12915 문자열 내 마음대로 정렬하기
문제 정리
각 문자열의 n번째 글자끼리만 비교해서 오름차순 정렬.
다 소문자 알파벳.
인덱스 1의 문자가 같은 문자열이 여러개면 사전순.
생각해보기
n번째 문자열을 뽑아서 char 아스키 코드 성질 이용해서 a=0, b=1 이런 식으로
해당 인덱스에 int값을 넣음.
그 다음에 같은 숫자인 것 끼리 새 벡터에 넣어서 사전순 정렬(sort)해주고 answer에 벡터를 push_back(append)
코드 쓰기
string 정렬은
bool comp(string s1, string s2){
return s1 < s2; //사전순 정렬
}
// ...
string arr[5] = {"asda", ..., "asdss"};
sort(arr, arr+5, comp)
이런식으로 비교 함수를 만들어서 sort를 쓰면 가능!
내 풀이
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool comp(string s1, string s2){
return s1 < s2;
}
vector<string> solution(vector<string> strings, int n) {
vector<string> answer;
int size = strings.size();
vector<int> s(size, 0);
vector<string> temp; // 같은 숫자인 것 끼리 임시로 저장해둘 벡터
for(int i=0; i<strings.size(); i++){
s[i] = strings[i].at(n) - 'a';
}
for(int i=0; i<26; i++){
for(int k=0; k<strings.size(); k++){
if(s[k] == i){
temp.push_back(strings[k]);
}
}
sort(temp.begin(), temp.end(), comp);
answer.insert(answer.end(), temp.begin(), temp.end());
temp.clear();
}
return answer;
}
풀고 나서 알게된 것
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;
}
string도 그냥 [i] 이런식으로 인덱스 접근이 가능하군아..
compare함수를 그냥 저런 식으로 쓰면 바로 해결 간으한 거였음..
sort에서 compare함수의 작동 원리를 공부해야 할 듯..