1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #include <string> #include <vector> #include <algorithm> using namespace std; long long solution(long long n) { long long answer = 0; int count = 0; int var = 1; vector <int>num; while (n != 0) { num.push_back(n % 10); n = n / 10; } sort(num.begin(), num.end()); for (int i = 0; i < num.size(); i++) { answer += num[i] * var; var*= 10; } return answer; } | cs |
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건
n은 1이상 8000000000 이하인 자연수입니다.
문제를 처음 보자마자 든 생각은 형변환과 메소드로 간편하게 풀 수 있을거란 생각이 들었지만 알고리즘적으로 해결하고 싶었다.
첫번째 while문에서는 정수 n의 자릿수들을 벡터 num에 넣고 오름차순으로 정렬했다.
그 다음 for문에서는 1,10,100,1000... 이런 식으로 벡터 num에 곱해줌으로서 문제가 요구하는 조건을 맞추었다.
'프로그래머스 > C++' 카테고리의 다른 글
[KAKAO BLIND RECRUITMENT] 비밀지도 (2) | 2018.08.31 |
---|---|
[level 1] 문자열 내 마음대로 정렬하기 (2) | 2018.08.30 |
[level 1] 문자열 다루기 기본 (0) | 2018.08.23 |
[level 1] 자연수 뒤집어 배열로 만들기 (0) | 2018.08.23 |
[level 1] 2016년 (0) | 2018.08.19 |