자연수 뒤집어 배열로 만들기

이윤설·2024년 5월 8일


https://school.programmers.co.kr/learn/courses/30/lessons/12932?language=java

제출코드

class Solution {
    public int[] solution(long n) {
        String stringNum = String.valueOf(n);
        Integer[] tempArray = new Integer[stringNum.length()];
        int[] answer = new int[stringNum.length()];
        
        for(int i = 0; i < stringNum.length(); i++) {
            char c = stringNum.charAt(i);
            Integer number = Character.getNumericValue(c);
            tempArray[i] = number;
        }
        
        Arrays.sort(tempArray, Collections.reverseOrder());
        
        for(int i = 0; i < tempArray.length; i++) {
            answer[i] = tempArray[i]; // 오토 언박싱을 통해 Integer를 int로 변환
        }
        
        return answer;
    }
}

샘플 케이스는 통과했지만, 테스트 케이스들을 통과하지 못함

모범답안

import java.util.Arrays;
import java.util.Collections;


class Solution {
    public int[] solution(long n) {
        // Long 12345 -> String "12345"
        String str = Long.toString(n);
        
        // String reversed = "54321"
        String reversed = new StringBuilder(str).reverse().toString();
        
        // char[] arr = ['5','4','3','2','1']
        char[] arr = reversed.toCharArray();
        
        int[] result = new int[arr.length];
        
        // char - '0' = int
        for (int i = 0; i < result.length; i++) {
            result[i] = arr[i] - '0';
        }
        return result;
    }
}

배운점

  1. 문제의 요구사항은 주어진 자연수 n을 뒤집어서 각 자리 숫자를 원소로 가지는 배열을 반환하는 것이다. 내 코드가 테스트케이스를 통과하지 못하는 이유는 내 코드가 숫자를 단순히 뒤집는 것이 아니라, 배열을 내림차순으로 정렬하기 때문이다.
    즉, 숫자를 뒤집는 것 != 배열을 내림차순으로 정렬하는 것이다.
  • 숫자 뒤집기: 숫자의 순서를 역순으로 만든다.
    예를 들어 숫자 12030을 뒤집은 결과는 03021이다.

  • 내림차순 정렬: 숫자의 크기가 큰 순서대로 정렬한다.
    예를 들어 숫자 12030을 내림차순 정렬한 결과는 32100이다.

  1. 오토 언박싱
for(int i = 0; i < tempArray.length; i++) {
      answer[i] = tempArray[i]; // 오토 언박싱을 통해 Integer를 int로 변환
}

Integer로 int로 변환하는 것은 그냥 대입하면 된다. 이를 오토 언박싱이라고 한다.

  1. String "12345" 를 String "54321"로 바꾸는 방법
String reversed = new StringBuilder(str).reverse().toString();
  a. StringBuilder를 선언 후 괄호에 str를 넣는다. 
  b. 메소드 체이닝으로 reverse()로 호출하여 뒤집는다.
  c. toString()으로 String으로 변환한다.
  1. 반복문에선 length()를 괄호를 빼서 사용한다.

  2. Character - '0' 을 하면 int가 된다.

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글