CODING/CS, 알고리즘, 자료구조 공부

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

codingTrip 2025. 6. 13. 15:12

나의 풀이

class Solution {
    public int[] solution(long n) {
        String strN = Long.toString(n);
        int[] answer = new int[strN.length()];
        for (int i = 0; i < strN.length() ; i++) {
            answer[i] = strN.charAt(strN.length()-(i+1)) - '0';
        }
        return answer;
    }
}

 

트러블슈팅 1

for (int i = 0; i < strN.length() ; i++) {
    answer[i] = strN.charAt(strN.length()-i) - '0';
}

OutOfBounds 예외가 발생했다.
자릿수는 5개 즉 5인데, i는 0부터 시작한다.

5 - 0 = 5번째 값은 없다. (0부터 시작하기 때문에 0 1 2 3 4)

즉 맨 마지막 자리는 4여야 한다.

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:711)
at Solution.solution(Unknown Source)
at SolutionTest.lambda$main$0(Unknown Source)
at SolutionTest$SolutionRunner.run(Unknown Source)
at SolutionTest.main(Unknown Source)
for (int i = 0; i < strN.length() ; i++) {
    answer[i] = strN.charAt(strN.length()-(i+1)) - '0';
}

따라서 5 - 1 = 4 값이 나오도록 수정했다.


 

다른 사람의 풀이

import java.util.stream.IntStream;

class Solution {
    public int[] solution(long n) {
        return new StringBuilder().append(n).reverse().chars().map(Character::getNumericValue).toArray();
    }
}

 

🔸 new StringBuilder().append(n)

  • 숫자 n을 문자열로 변환해서 StringBuilder에 추가합니다.
  • 예: n = 12345 → "12345"

🔸 .reverse()

  • 문자열을 뒤집습니다.
  • "12345" → "54321"

🔸 .chars()

  • 문자열 "54321"을 문자(char) 하나씩 IntStream으로 바꿉니다.
  • '5', '4', '3', '2', '1' → 각각의 ASCII 값(예: '5' → 53)으로 처리됨

🔸 .map(Character::getNumericValue)

  • 문자형 숫자 '5', '4', …을 실제 정수 5, 4, …로 변환합니다.
  • '5' → 5, '4' → 4, …

🔸 .toArray()

  • 최종적으로 int[] 배열로 반환합니다.

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