개발하는 kim-hasa

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

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;
}