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