코딩테스트/프로그래머스

프로그래머스 LV1 C++ 문자열 내마음대로 정렬하기 풀이

sky하연 2024. 4. 16. 14:18
728x90

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

 

코드 설명

난 algorithm에 포함된 함수 sort를 활용하여 간단하게 풀이 하였다.

먼저 num을 전역 변수로 선언해 주었다.

using namespace std;
int num;

입력받은 n을 num에 넣어 주고 sort를 실행하였다.

이번에는 사용자 함수를 사용하여 sort를 사용하였다.

vector<string> answer;
    num = n;
    
    sort(strings.begin(), strings.end(), compare);

compare함수를 따로 만들어서 string의 num인덱스 값에 따라 오름차순으로 정렬하게 해주었다.

같은 경우에는 사전 순으로 정렬하게 하였다.

using namespace std;
int num;
bool compare(string a, string b){
    if(a[num] != b[num]){
    return a[num]<b[num];
    }
    else return a<b;
}

마무리로 answer에 뒤부터 차곡차곡 쌓아주면 끝!

 for(int i = 0; i < strings.size(); i++){
        answer.push_back(strings.at(i));
    }

전체 코드

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

using namespace std;
int num;
bool compare(string a, string b){
    if(a[num] != b[num]){
    return a[num]<b[num];
    }
    else return a<b;
}

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;
    num = n;
    
    sort(strings.begin(), strings.end(), compare);
    for(int i = 0; i < strings.size(); i++){
        answer.push_back(strings.at(i));
    }
    return answer;
}
728x90