[자바(JAVA)] 정수 내림차순으로 배치하기 String.parseString(n), StringBuilder(). reverse()

Noh Jihyeon·2023년 12월 15일
0
post-thumbnail

문제: https://school.programmers.co.kr/learn/courses/30/lessons/12933




🔻 String.parseString()의 오류

처음에는 String.parseString(n) 메서드를 사용하려 했으나, Java에서 이런 메서드는 없었다.
필요할 경우 String.valueOf(n) 또는 Long.toString(n)을 사용하여 long 타입의 숫자를 문자열로 변환할 수 있었다.



🔻 Collections.sort()와 StringBuilder.reverse()의 정렬과 문자열 변환

내가 생각해낸 방법은 아래와 같다.

  1. 숫자를 각 자릿수별로 분해하여 ArrayList에 저장.
  2. Collections.sort()를 사용하여 내림차순 정렬.
  3. StringBuilder를 사용하여 정렬된 숫자를 문자열로 변환.



이 내용을 토대로 문제를 풀어봤다.





--

✅ 내 풀이(1) : Arrays.sort()와 StringBuilder 사용


import java.util.Arrays;

class Solution {
    public long solution(long n) {
        String str1 = Long.toString(n);
        char[] ch = str1.toCharArray();
        StringBuilder sbuilder = new StringBuilder();
        
        Arrays.sort(ch);
        
        for(int i=ch.length-1; i>=0; i--) {
            sbuilder.append(ch[i]);
        }
        String str2 = sbuilder.toString();
        long answer = Long.parseLong(str2);
        return answer;
    }
}

👉 문자열을 배열로 변환하고, 배열을 정렬한 후 StringBuilder를 사용하여 문자열을 뒤집고, 다시 숫자로 변환했다.

✅ 내 풀이(2) : ArrayList와 Collections 사용

import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public long solution(long n) {
        ArrayList<Integer> temp = new ArrayList<>();
        while(n > 0){
            temp.add((int)(n % 10));
            n /= 10;
        }
        Collections.sort(temp, Collections.reverseOrder());
       
        StringBuilder result = new StringBuilder();
        for (int digit : temp) {
            result.append(digit);
        }
       
        return Long.parseLong(result.toString());
    }
}

👉 숫자를 분해하여 각 자릿수를 내림차순으로 정렬한 후, 다시 문자열로 합치는 과정을 거칩니다.

📚 배운 점: StringBuilder의 reverse() 메서드
StringBuilder 클래스에는 문자열을 뒤집는 reverse() 메서드가 구현되어 있었다. 반면, String 클래스는 불변(immutable)하기 때문에 reverse() 메서드를 직접 제공하지 않는다.
따라서 문자열을 뒤집기 위해서는 StringBuilder를 사용하는게 효율적이다

profile
꼭꼭 씹어서 소화시키는 맛있는 코딩

0개의 댓글