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을 사용하여 하나의 문자열로 변환합니다.
변환된 문자열은 정수로 바꿔주면 답을 구할 수 있습니다.
'입문문제' 카테고리의 다른 글
| [연습문제] 제일 작은 수 제거하기 (1) | 2024.11.20 |
|---|---|
| [연습문제] 정수 제곱근 판별 (0) | 2024.11.18 |
| [연습문제] 자연수 뒤집어 배열로 만들기 (0) | 2024.11.14 |
| [연습문제] 자릿수 더하기 (0) | 2024.11.13 |
| [연습문제] 이상한 문자 만들기 (0) | 2024.11.12 |