https://programmers.co.kr/learn/courses/30/lessons/12933
코딩테스트 연습 - 정수 내림차순으로 배치하기
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조건 n은 1이
programmers.co.kr
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(int i, int j) {
return j < i;
}
long long solution(long long n) {
long long answer = 0;
vector <int> v;
while (n != 0) {
int num = n % 10;
n /= 10;
v.push_back(num);
}
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < v.size(); i++) {
answer = answer * 10 + v[i];
}
return answer;
}
while 문을 사용하여
매개변수 n을 10으로 나누고 나머지는 벡터에 넣는 것을 반복한다.
그다음 큰 것부터 작은 순으로 정렬한 정수를 만들기 위해
벡터를 내림차순으로 정렬한다.
마지막으로 for 문을 사용하여 정답을 구한다.
answer = answer * 10 + v[i]인 이유
-> 벡터 v의 요소가 {8, 7, 3, 2, 1, 1}이라고 가정하면
i가 0일 때 answer = 0 * 10 + 8 (8)
i가 1일 때 answer = 8 * 10 + 7 (87)
i가 2일 때 answer = 87 * 10 + 3 (873)
.
.
i가 5일 때 answer = 87321 * 10 + 1
즉, answer = 873211이 나온다.
'코딩테스트 > Programmers' 카테고리의 다른 글
없는 숫자 더하기 (JS) (0) | 2022.07.07 |
---|---|
자연수 뒤집어 배열로 만들기 (C++) (0) | 2021.10.07 |
두 정수 사이의 합 (C++) (0) | 2021.10.07 |
음양 더하기 (C++) (0) | 2021.10.06 |
두 개 뽑아서 더하기 (C++) (0) | 2021.10.06 |