본문 바로가기
Algorithm/C++

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

by imagineer_jinny 2022. 5. 27.

코딩테스트 연습 - 문자열 내 마음대로 정렬하기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

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

programmers.co.kr

 

어려웠던 점

대상이 되는 문자를 뽑고 그 문자의 인덱스 혹은 전체 글자도 같이 저장해야하지 않나? 라는 생각에

multimap을 이용해서 풀어야겠다 라고 생각했고

그렇게 iterator까지 하다가 잘 안되서 풀이 봄

 

찾아보니 sort와 cmp를 연습하는 문제라고 함..

 

compare() 함수를 만들어서 sort()의 세 번째 인자 값으로 넣게 되면, 해당 함수의 반환 값에 맞게 sort()가 실행된다. 이때 compare함수의 반환값을 어떻게 해야 오름차순이고 내림차순인지 헷갈릴 수 있다. 오른쪽이 왼쪽보다 크기때문에 오른쪽은 계속 크게 정렬될 것이다. 따라서 오름차순으로 정렬된다고 생각하면 외우기 편하다.

 

오름차순 : <

내림차순:  > 

내림차순: 왼쪽에 있는 것이 더 크도록 정렬하겠다 

 

[Algorithm] sort() 함수 사용하기(feat. compare 이용하기 ) (tistory.com)

 

풀이

#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int N;
 
bool mysort(string a, string b){
    if(a.at(N)!=b.at(N)){
        return a.at(N) < b.at(N);   //N인덱스의 문자로 정렬
    }else{
        return a < b;   //사전순으로 정렬
    }
    //return a.at(N)==b.at(N) ? a < b : a.at(N) < b.at(N);
}
 
vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;
    answer = strings;
    N = n;
    sort(answer.begin(),answer.end(),mysort);
    return answer;
}

 

 

 

댓글