본문 바로가기

c++/프로그래머스 1 Lv

[프로그래머스] 정수 내림차순으로 배치하기

문제

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

 

제한사항

  • n은 1이상 8000000000 이하인 자연수입니다.

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12933

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이[c++]



using namespace std;

long long solution(long long n) {
    long long answer = 0;
    int arr[10]{0,};
    while(n){
        int num=n%10;
        arr[num]++;
        n /=10;
    }
    for(int i=9;i>=0;i--){
        for(int j=0;j<arr[i];j++){
            answer*=10;
            answer+=i;
        }
    }
    return answer;
}

 

 

10자리 배열을 만들고 숫자의 각 자릿수의 숫자에 개수에 맞게 배열의 값을 늘린다.

예시)

129990

arr[0] arr[1] arr[2] arr[3] arr[4] arr[5] arr[6] arr[7] arr[8] arr[9]
1 1 1 0 0 0 0 0 0 3

9가 3개 있으므로 arr[9]에 3,    0,1,2가 각각 하나씩 있으므로 arr[0],arr[1],arr[2]에 1,  나머지 숫자는 없으므로 0이다.

 

이렇게 구한 배열을 사용하여 큰 수부터 차례로 세면 된다.

예시)

9가 3개 이므로 숫자는 999로 시작 3~8까지 0이므로 무시하고 0,1,2가 1 있으므로 붙이면 답은 999210이 된다.