Algorithm/Programmers(c++)
[c++][프로그래머스] 문자열 내 마음대로 정렬하기
kim-hasa
2021. 8. 2. 18:01
https://programmers.co.kr/learn/courses/30/lessons/12915
코딩테스트 연습 - 문자열 내 마음대로 정렬하기
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱
programmers.co.kr
특정 원소를 기준으로 단어를 정렬하는 방법입니다.
1. 특정 원소가 맨 앞이라면, 그대로 정렬하면 됩니다.
2. 특정 원소를 맨 앞으로 보내서 단어를 새로 만든 후, 배열에 넣습니다.
그 이후에 배열을 정렬하고 그 단어를 원상복구하면 완료!
단어를 재조합한다는 생각을 하지 못해서 오래 걸린 문제.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> solution(vector<string> strings, int n) {
vector<string> answer;
string arr1;
string arr2;
if(n == 0) // 맨 처음인 경우, 정렬해서 리턴
{
sort(strings.begin(), strings.end());
return strings;
}
else
{
for(int i=0; i<strings.size(); i++)
{
arr1 = strings[i];
arr2 = arr1[n];
arr2 = arr2 + arr1.substr(0, n) + arr1.substr(n+1);
// 특정 원소를 맨 앞으로 둔 후, 정답배열에 넣음
answer.push_back(arr2);
}
sort(answer.begin(), answer.end());
// 정답배열을 정렬
for(int j=0; j<answer.size(); j++)
{
arr1 = answer[j];
arr2 = arr1.substr(1, n) + arr1[0] + arr1.substr(n+1);
answer[j] = arr2; // 원상복구
}
}
return answer;
}