[C++] 정수 내림차순으로 배치하기 - 벡터의 내림차순, 벡터 to int

wansuper·2023년 12월 22일
0

CodingTest

목록 보기
11/34

내 풀이 + ChatGPT 풀이

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

using namespace std;

long long solution(long long n) {
    vector<int> answer;
    
    // 벡터 answer에 역순으로 저장. 역순이 아니어도 됨.
    while (n) {
        int element = n % 10;
        answer.push_back(element);
        n = n / 10;
    }
    // vector + 내림차순
    sort(answer.rbegin(), answer.rend());
    
    // vector 뽑아내기
    int result = 0;
    for (int i = 0; i < answer.size(); i++) {
        result = result * 10 + answer[i];
    }
    
    return result;
}

int형 벡터 to int형 정수 변환 방법 by 계산

위의 풀이 중 다음의 코드만 GPT의 도움을 받았다.

    // vector 뽑아내기
    int result = 0;
    for (int i = 0; i < answer.size(); i++) {
        result = result * 10 + answer[i];
    }
  • 첫번째 원소에 10을 곱하고 두번째 원소를 더한다. 그리고 이를 반복하면 10을 곱해줌으로써, 다음 원소가 들어올 수 있는 일종의 공간을 만들 수 있게 된다.
    • 기존 내 생각: pop_back으로 string 변환 후 stoi()로 바꿀 생각을 했었는데, 이렇게 풀이하는 방식이 훨씬 깔끔하고 이해하기 편한 것 같다.

sort() - 내림차순 구현 방식 3가지

아 물론, sort 함수를 사용한 코드는 구글링으로 해결했다. 내림차순을 나타내는 방법이 세가지 있음을 알게 되었다.

 sort(answer.rbegin(), answer.rend()); // 1.
 reverse(answer.begin(), answer.end()); // 2. 
 sort(answer.begin(), answer.end(), compare); // 3. comp 함수 구현 필요
 
 bool compare(int a, int b) {
 	return a > b;
 }
 
  • 1번째 sort(): r을 붙이고 (reverse) begin, end로 sort하면 내림차순 배열이 가능하다.
  • 2번째 reverse(): r을 붙이지 않고, reverse 함수를 사용하여 내림차순 배열이 가능하다.
  • 3번째 sort():

    함수의 이름은 당연히 compare가 아닌 어떤 것이라도 상관없으며, 주의해야 할 점은 인자로는 compare()가 아닌 compare를 넣어줘야 한다는 것이다.

sort 함수에서 세 번째 인자로 들어간 함수를 인식하여, 자동으로 앞에 수를 i, 뒤에 수를 j에 넣어주게 되는데, i > j가 참이면 1, 거짓이면 0을 반환하는 함수이므로, i가 j보다 클 경우 sort를 실시하게 되어 내림차순으로 정렬된다.

  • 기억하자. 세번째 인자는 함수라 할지라도 '함수명' 만이 들어간다!!!!
  • 이 방법은 굳이 내림차순 정렬만이 아니라 특정 조건에 따라서 정렬을 하고자 할 때 사용할 수 있다.
profile
🚗 Autonomous Vehicle 🖥️ Study Alone

0개의 댓글