[프로그래머스/Java] 자연수 뒤집어 배열로 만들기

김소연·2026년 4월 29일
  • 문제: 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

    가장 먼저 생각난 해결법은 숫자를 뒤에서부터 하나씩 꺼내서 배열에 넣는 방법이다.

    1. 맨 뒤 숫자 꺼내기 → 5
    2. 그 다음 숫자 → 4
    3. 계속 반복
    class Solution {
        public int[] solution(long n) {
            String str = String.valueOf(n);
            int[] answer = new int[str.length()];
    
            int i = 0;
            while (n > 0) {
                answer[i] = (int)(n % 10); // 마지막 자리
                n /= 10;                  // 마지막 자리 제거
                i++;
            }
    
            return answer;
        }
    }

핵심

숫자를 문자열로 바꿔서 하나씩 꺼내기 쉽게 만드는 것

  • String 클래스의 valueOf() 메소드
    다른 타입의 값을 문자열(String)로 바꿔준다

    long n = 12345;
    
    String str = String.valueOf(n);

    👉 str = "12345"

    숫자 상태에서는 각 자리에 바로 접근이 어려우므로 문자열로 바꿔서 한 글자씩 접근한다.

    str.charAt(0) // '1'
    str.charAt(1) // '2'

    • 🔄 비슷한 기능과 비교
    1. String.valueOf(n)
      가장 많이 사용 👍
      null 안전성도 좋음

    2. n + ""

      String str = n + "";

      간단하지만 가독성 조금 떨어짐

    3. Long.toString(n)

      String str = Long.toString(n);

      이것도 동일한 결과
      특정 타입에 맞는 방식


반대라면

  • 문자 '5'를 숫자 5로 바꾸는 과정

    char c = '5';
    int num = c - '0';

    이렇게 같이 쓰인다

    str.charAt(i) - '0'

  • charAt()

    String str = "12345";
    char c = str.charAt(0);

    결과

    c = '1'

  • 그럼 왜 '0'을 빼면 숫자가 될까?

    컴퓨터는 문자를 내부적으로 숫자로 저장한다.

    문자실제 저장 값 (아스키 코드)
    '0'48
    '1'49
    '2'50
    '3'51

    👉 "문자 숫자에서 '0'을 빼면 진짜 숫자가 된다"

    '3' - '0'

    결과 👉 51 - 48 = 3


0개의 댓글