본문 바로가기
연습장

연습문제 > 정수 내림차순으로 배치하기

by anothel 2021. 11. 27.

문제 설명

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

제한 조건
  • n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n return
118372 873211

 

Solution

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

using namespace std;

long long solution(long long n) {
  vector<long long> v;
  long long answer = 0;

  while (0 < n) {
    v.push_back(n % 10);
    n /= 10;
  }

  sort(v.begin(), v.end());

  int srt = 0;
  for (auto x : v) answer += x * pow(10, srt++);

  return answer;
}

 

남의 코드

#include <string>
#include <vector>
#include <algorithm>
#include <functional>
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으로 변환해서 한 번에 정렬할 수 있다는 것이 얄밉기 때문이다. 그런데 반칙이 어디에 있겠는가. 나도 다음부터는 저렇게 해야겠다.

 

(url: https://programmers.co.kr/learn/courses/30/lessons/12933)

 

728x90