본문 바로가기

Algorithm/Programers - C++

[프로그래머스]정수 내림차순으로 배치하기/sort, stoll, stoi

문제

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰 것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를 들어 n이 118372면 873211을 리턴하면 됩니다.

 

풀이

#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

long long solution(long long n) {
    long long answer = 0;
    vector<long long> num;
    string s = to_string(n);
    for(int i=0; i<s.length(); i++){
        num.push_back(s[i]-'0');
    }
    int size = num.size();
    sort(num.begin(), num.end(),greater<>());
    for(int i=0; i<size; i++){
        answer += num[i] * pow(10, size-1-i);
    }
    
    return answer;
}

숫자를 string으로 바꾼 후 vector에 넣어주어 sort를 이용해 정렬해 주었다.

 


다른 사람 풀이

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

long long solution(long long n) {
    long long answer = 0;

    string str = to_string(n);
    sort(str.begin(), str.end(), greater<char>());
    answer = stoll(str);

    return answer;
}

string 자체에도 sort를 쓸 수 있었다!

숫자를 string으로 바꾸어주어 sort를 사용해 내림차순으로 정렬한 후 atoll을 이용해 문자를 longlong타입으로 바꾸어주었다.

 

 

atoll

- atol() 함수는 문자 스트링을 long 값으로 변환한다. 

- atoll() 함수는 문자 스트링을 long long 값으로 변환한다.

 

 

atoi

- atoi() 함수는 문자 스트링을 정수 값으로 변환한다.

 

 

 


https://www.ibm.com/docs/ko/i/7.3?topic=lf-atol-atoll-convert-character-string-long-long-long-integer