문제
함수 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이 된다.
'c++ > 프로그래머스 1 Lv' 카테고리의 다른 글
[프로그래머스] 두 정수 사이의 합 (0) | 2023.08.23 |
---|---|
[프로그래머스] 하샤드 수 (0) | 2023.08.23 |
[프로그래머스] 정수 제곱근 판별 (0) | 2023.08.22 |
[프로그래머스] 문자열을 정수로 바꾸기 (0) | 2023.08.22 |
[프로그래머스] 문자열 내 p와 y의 개수 (0) | 2023.08.22 |