[연습문제] 정수 내림차순으로 배치하기

2024. 11. 16. 18:00입문문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다.

n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요.

예를 들어 n이 118372면 873211을 리턴하면 됩니다.


제한 조건

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

입출력 예

n return
118372 873211

자릿수 분해, 정렬, 합성이 포함된 복합 문제입니다.

어려운 난이도는 아니지만 모르면 복잡하게 풀 수밖에 없습니다.

 

우선 자바일 때의 풀이를 생각해보겠습니다.

1. 모든 자릿수를 분해해서 배열에 넣는다.

2. 배열을 오름차순으로 정렬한다.

3. 배열 순서대로 숫자를 더해 합을 만든다.

 

파이썬일 때는 다음과 같이 풀면 될 것 같습니다.

1. 정수를 문자로 변환한다.

2. 변환된 문자를 리스트로 만든다.

3. 리스트를 정렬하고 조인한 뒤, 정수형으로 변환한다.

 

정답 코드를 작성해보겠습니다.

 

1. 자바

// 패키지 불러오기
import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public long solution(long n) {
        // 정답을 저장할 answer
        long answer = 0;
        // 자릿수를 저장할 value
        long value = 0;
        // ArrayList 선언
        ArrayList<Long> aList = new ArrayList<Long>();
        // 각 자릿수를 추가합니다.
        while (n > 0) {
            value = n % 10;
            aList.add(value);
            n /= 10;
        }
        // 내림차순 정렬
        Collections.sort(aList);
        Collections.reverse(aList);
        // 값을 더해줍니다.
        for (int i=0; i<aList.size(); i++) {
            answer *= 10;
            answer += aList.get(i);
        }
        // answer을 반환합니다.
        return answer;
    }
}

 

배열을 사용하기는 자릿수가 유동적이므로 ArrayList를 사용해 문제를 풀었습니다.

 

2. 파이썬

def solution(n):
    answer = int(''.join(reversed(sorted([i for i in str(n)]))))
    return answer

 

문자로 만든 i를 리스트에 저장하면서, sorted를 통해 정렬을 합니다.

sorted는 기본이 오름차순이기 때문에 reversed로 내림차순으로 변환해준 뒤, ''.join을 사용하여 하나의 문자열로 변환합니다.

변환된 문자열은 정수로 바꿔주면 답을 구할 수 있습니다.