> [!date] published: 2021-03-31
[코딩테스트 연습 - 문자열 내 마음대로 정렬하기 \| 프로그래머스 스쿨](https://programmers.co.kr/learn/courses/30/lessons/12915)
## 🌟 문제
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 \["sun", "bed", "car"\]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
## 🌟 풀이
처음 문제를 봤을 때에는
- n번째 인덱스의 문자가 같을 경우
- 내림차순일 경우
이렇게 두가지의 경우로 나누어서 풀려고 그랬는데 코드가 뭔가 불필요하게 길어지고 이상하게 헷갈리고 그래서 다른 방법을 생각해보았다.
어떠한 특정한 **기준**이 주어지고, 그 기준을 갖고 **정렬**하는 문제이기 때문에 sort 함수를 사용하고 cmp 함수에다 그 기준을 구현해주면 간단하게 코드를 짤 수 있을 것 같았다.
```cpp
bool cmp(string a, string b){
if(a[idx] == b[idx])
return(a < b);
return(a[idx] < b[idx]);
}
```
이렇게 n번째 인덱스가 같을 경우에는 사전 순서 기준으로 비교하고, 그 외의 경우에는 n번째 인덱스 순서 기준으로 비교하도록 cmp 함수를 구현해 준 다음에
```cpp
sort(answer.begin(), answer.end(), cmp);
```
sort 함수를 이용해서 정렬해주었다.
## 🌟 코드
```cpp
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int idx;
bool cmp(string a, string b){
if(a[idx] == b[idx])
return(a < b);
return(a[idx] < b[idx]);
}
vector<string> solution(vector<string> strings, int n) {
vector<string> answer;
answer.assign(strings.begin(), strings.end());
idx = n;
sort(answer.begin(), answer.end(), cmp);
return answer;
}
```