상세 컨텐츠

본문 제목

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

알고리즘/프로그래머스 1단계

by 셉인 2024. 2. 24. 17:00

본문

728x90

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

 

내림차순 정렬하는 것처럼 함수를 만들어서 정렬시키려고 난리부루스를 했는데 이상하게 되었다.

compare변수에 int n이라는 파라미터를 하나 더 넣어서 난리가 난 것 같다.

그래서 어떻게 할지 찾아봤는데 무슨 람다 함수가 있다고 해서 난리쳤는데 잘못된 코드로 종결

 

잘못된 코드

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

using namespace std;

// n번째 인덱스를 기준으로 정렬하는 비교 함수 정의
bool compare(const string &s1, const string &s2, int n) {
    return s1[n] < s2[n]; 
}

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;
    
    // 람다 함수를 사용하여 compare 함수를 정의하고 n을 캡처하여 전달
    sort(strings.begin(), strings.end(), [n](const string &s1, const string &s2) {
        return compare(s1, s2, n);
    });
    
    // 정렬된 결과를 answer에 복사
    answer = strings;
    
    return answer;
}

 

 

근데 간단히 입력받은 n을 compare함수에서도 쓸 수 있도록 하는 방법이 있던 것!

풀이방법

그 방법은 "전역변수"를 사용하는 것이다.

전역변수를 이용해 인덱스를 넣어주는 것.

여기서는 전역변수 num을 이용해주었다.

그럼 위의 이상한 난리친 것과 다르게 깔끔하게 나올 수 있게 되었다.

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

using namespace std;

int num=0;
// n번째 인덱스를 기준으로 정렬하는 비교 함수 정의
bool compare(string s1, string s2) {
    if(s1[num] == s2[num]){
        return s1<s2;
    }
    return s1[num] < s2[num]; 
}

vector<string> solution(vector<string> strings, int n) {
    vector<string> answer;
    num=n;
    sort(strings.begin(), strings.end(), compare);
    return strings;
}
728x90

관련글 더보기

댓글 영역