문제 설명
함수 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
'연습장' 카테고리의 다른 글
연습문제 > 자릿수 더하기 (0) | 2021.11.27 |
---|---|
연습문제 > 자연수 뒤집어 배열로 만들기 (0) | 2021.11.27 |
연습문제 > 정수 제곱근 판별 (0) | 2021.11.27 |
연습문제 > 제일 작은 수 제거하기 (0) | 2021.11.27 |
연습문제 > 짝수와 홀수 (0) | 2021.11.27 |