1. 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이 과정
정수를 내림차순으로 정렬해 배치하면 되는 간단한 문제이다.
1. 해당 정수의 각 자릿수를 배열에 저장
2. 해당 배열을 내림차순 정렬
3. 정렬된 배열을 다시 하나의 정수로 합치기
이 과정을 통해 쉽게 구현할 수 있다.
바로 코드를 보자.
3. 내 코드
import java.util.*;
class Solution {
public long solution(long n) {
// 해당 정수의 각 자릿수를 리스트에 저장
List<Long> list = new ArrayList<>();
while(n > 0) {
list.add(n % 10);
n /= 10;
}
// 리스트를 내림차순 정렬
Collections.sort(list, Collections.reverseOrder());
// 리스트를 정수로 변환
long answer = 0;
for(int i = 0; i < list.size(); i++) {
answer += list.get(i) * Math.pow(10, list.size() - i - 1);
}
return answer;
}
}
시간 복잡도
- O(logN * log(logN)
N은 주어진 숫자이다. 주어진 숫자의 자릿수는 logN이기 때문에 이를 배열로 만들어 정렬한 시간복잡도는 O(logN*log(logN)이 된다.
문자열 배열을 활용하는 방법
import java.util.*;
class Solution {
public long solution(long n) {
// 해당 정수의 각 자릿수를 문자열 배열에 저장
String[] arr = Long.toString(n).split("");
// 내림차순 정렬
Arrays.sort(arr, Collections.reverseOrder());
// 정렬된 배열을 다시 합치기
StringBuilder sb = new StringBuilder();
for(int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
}
// long으로 변환 후 반환
return Long.parseLong(sb.toString());
}
}
자바에서 문자열 관련 메서드는 최적화가 잘돼있기 때문에 조금 더 효율적으로 코드를 짤 수 있다.
4. 피드백
- 문자열을 합칠 때는 StringBuilder를 사용하자.
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (0) | 2024.06.20 |
---|---|
[프로그래머스] K번째 수 (0) | 2024.06.20 |
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2024.06.19 |
[프로그래머스] 외벽 점검 (0) | 2024.06.16 |
[프로그래머스] 양궁 대회 (0) | 2024.06.14 |