코딩테스트/Programmers

정수 내림차순으로 배치하기 (C++)

동띵 2021. 9. 3. 17:05

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