프로그래머스 Level 1
🔒 정수 내림차순으로 배치하기
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
n | return |
---|---|
118372 | 873211 |
import java.util.Arrays;
import java.util.Collections;
class Solution {
public long solution(long n) {
long answer = 0;
String[] str = Long.toString(n).split("");
Arrays.sort(str, Collections.reverseOrder());
String answ = "";
for(String s : str)
answ += s;
answer = Long.parseLong(answ);
return answer;
}
}
문제를 대충 보고 int 배열을 받는 줄 알아서 "정렬을 이용하면 되는구나! 무슨 정렬을 이용할까? 선택정렬? 삽입정렬?" 이러고 있었는데 long으로 정수를 받는 문제였다...
long을 각 자리수마다 나누어 내림차순으로 비교하려면 하샤드 수처럼 String으로 변환하여 배열로 만들어야 한다고 생각했다.
그 String 배열을 다시 int 배열로 만들어서 정렬을 하고 정렬이 다 되면
- 자리수만큼 10을 제곱한 값을 배열 값과 곱하여 더해준다.
- String으로 다시 전환하여 다 더하고 마지막에 long으로 형변환한다.
이 두가지 중 하나를 하려고 했다.
그런데 어렴풋이 생각나는 String 배열 정렬...💭
String 배열 정렬이 된다면 굳이 int 배열로 전환하지 않아도 될텐데!!
구글링했더니 역시나 있었다.
String 배열로 만들기 위해 n을 Long.toString()으로 String으로 만든 후 split()하여 배열로 만들었다.
String 배열 정렬은 Arrays.sort()로 하면 되는데 이 때 java.util.Arrays를 꼭 import 해줘야 한다.
그냥 sort()만 해버리면 오름차순으로 정렬이된다.
하지만 감자가 해야하는 정렬은 내림차순!!
sort()에 Collections.reverseOrder()를 두번째 매개변수로 넣어주면 내림차순으로 정렬된다고 한다!
이 때도 꼭 java.util.Collections를 import 해줘야 한다.
이제 String을 다시 Long으로 만들어주는 방법으로는 두번째 방법을 사용했다.
메모리는 많이 차지하겠지만 foreach문을 돌리며 String에 추가되도록 했다.
다 완성된 String은 다시 Long.parseLong()을 통해 Long으로 형변환!
레벨 1은 좀 쉬운 듯 한데...
조금만 머리쓰면 해결이 빠르게 되잖아?
문제 푸는 시간보다 오히려 글쓰는 시간이 더 길어...레벨 2로 바로 갈까?
하자마자 실패를 여러번 하게 만든 녀석 💥두둥등장!💥
코드 초기화만 세번한 것 같다
거만해지지 말고 차근차근 단계를 밟으며 앞으로 나아가야지...😅