[JAVA] 정수 내림차순으로 배치하기

태히·2021년 1월 11일
2

코딩테스트 연습

목록 보기
1/9

문제 내용

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

처음에 문제를 보고 뭔생각을 했는지 모르겠지만 그냥 뒤집으면 될것 같다고 생각했다. 거의다 마쳤을때 문제를 다시보고 삽질을 했다 생각했다....

자. 다시 문제를 보고 어떻게 풀면될까 생각해봤더니 우선 떠오른건

처음 떠오른 생각

n 정수를 입력받고 --> String으로 변환 후 --> 배열로 쪼갠다음 --> 내림차순으로 정렬을 하고 --> 마지막으로 정수로 다시 변환.

이게 처음 생각했던 풀이이다. 맞는진 모르겠지만 풀면서 글을 쓰고있기때문에 양해 부탁드린다,,,

 public long solution(long n){
        String s = Long.toString(n);
        String[]  arr = s.split("");
        long answer;
        Arrays.sort(arr, Collections.reverseOrder());
        String tmp = String.join("",arr);
        answer = Long.parseLong(tmp);
        System.out.println((answer));
        return answer;
    }

처음 쓴 코드이다.

내용

  1. Arrays.sort를 이용하여 정렬을 하고 Collections.reverseOrder()함수를 통해 내림차순으로 정렬을 한다.

  2. String.join()을 통해 ""띄어쓰기 없이 배열을 붙여 문자열로 만든다.

  3. 그 다음 다시 정수형으로 변환한다.

하지만,,,,,

  error: cannot find symbol
        Arrays.sort(arr, Collections.reverseOrder());
        ^
  symbol:   variable Arrays
  
  error: cannot find symbol
        Arrays.sort(arr, Collections.reverseOrder());
                         ^
  symbol:   variable Collections

이런 오류를 뱉으며 막혔다..... 인텔리제이에선 됐는데 말이지.....

[수정]
오류는 import오류였습니다...

import java.util.*;
import java.io.*;

를 추가하니까 정답으로 되더라구요 ㅠㅠ

,,,, A FEW MOMENTS LATER ,,,,

결국 인터넷을 찾아봤습니다 ㅜㅜ

자바 기본개념이 부족했던것 같습니다..ㅜㅜ
출처 : https://ljg960730.tistory.com/14

	String s = String.valueOf(n); 
        String ansnum= "";
        Long answer;
        char [] arr = new char[s.length()];
        for(int i=0; i<s.length(); i++){
            arr[i] +=s.charAt(i);
        }
        Arrays.sort(arr);
        for(int i = arr.length-1; i>=0; i--){
            ansnum+=arr[i];
            System.out.println(ansnum);
        }
        answer = Long.parseLong(ansnum);

        for(int i:arr){
            System.out.println(i);
        }
        return answer;

순서는
Line 1. 정수n을 String으로 변환
Line 4. arr라는 문자배열을 n의 길이만큼 선언
Line 6. n을 하나하나 쪼개 arr배열에 입력
Line 8. Arrays.sort(arr)를 이용해 오름차순 정렬
Line 10. for문을 이용해 마지막 인덱스부터 ansnum이라는 문자열에 '+'를 이용해 거꾸로 하나씩 붙여줌
Line 13. 다시 정수로 변환

문제를 푼 후기...

이번 문제를 통해서 charAt()이라는 문자열을 배열처럼 인덱스를 붙여 하나씩 접근할 수 있는 함수를 알게되었고, Arrays.sort()와 처음에 사용했었던Collections.reverseOrder()를 통해 내림차순으로 바꿀수 있는 기능과 String.join("",arr)을 통해 배열을 문자열로 변환할 수 있는 기능을 알게 되었습니다. 역시 여전히 부족하고 더 공부하자!!!

GITHUB 링크 : 정수 내림차순으로 배치하기_git

profile
하고싶은게 많은 개발자가 되고싶은

1개의 댓글

comment-user-thumbnail
2023년 6월 28일

아 import 문제였군요 ㅋㅋ 감사합니다!

답글 달기