[프로그래머스] 정수 내림차순으로 배치하기-JAVA

말하는 감자·2022년 5월 10일
1

Programmers Level 1

목록 보기
12/66
post-thumbnail

프로그래머스 Level 1

🔒 정수 내림차순으로 배치하기

📚 문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.


✅ 제한 조건

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

📖 입출력 예

nreturn
118372873211

🗝️ 작성 코드

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 배열로 만들어서 정렬을 하고 정렬이 다 되면

  1. 자리수만큼 10을 제곱한 값을 배열 값과 곱하여 더해준다.
  2. 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로 바로 갈까?

하자마자 실패를 여러번 하게 만든 녀석 💥두둥등장!💥

코드 초기화만 세번한 것 같다

거만해지지 말고 차근차근 단계를 밟으며 앞으로 나아가야지...😅

profile
나는 말하는 감자다

0개의 댓글