문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
n은 10,000,000,000이하인 자연수입니다.
입출력 예
| n | return |
| 12345 | [5,4,3,2,1] |
해설 :
1. 숫자가 아닌 '문자열'로 접근
String str = "" + n;
프로그래밍에서 숫자 12345는 하나로 뭉쳐진 덩어리 데이터입니다.
각 자릿수를 쪼개려면 원래 수학적인 연산(% 10, / 10)을 해야 하지만,
이를 문자열(텍스트)로 바꾸는 순간 "1", "2", "3", "4", "5"라는 5글자의 배열처럼 다룰 수 있게 됩니다.
눈으로 보면서 풀 수 있어 가장 직관적이고 실수를 줄여주는 방식입니다.
2. 배열의 크기를 동적으로 정하기
int[] answer = new int[str.length()];
배열을 만들 때는 반드시 "몇 칸짜리 상자를 만들 것인가"를 정해야 합니다.
입력되는 숫자 n이 몇 자리 수인지 알아내기 가장 좋은 방법이 바로 문자열의 길이(.length())를 재는 것입니다.
12345면 5글자이므로 정확히 5칸짜리 결과 배열이 만들어집니다.
3. 자연스러운 '뒤집기'를 위한 거꾸로 반복문
for (int i = str.length() - 1; i >= 0; i--)
문제를 보면 숫자를 뒤집어서 배열에 넣으라고 했기떄문에,
문자열 "12345"에서 맨 뒤에 있는 글자는 index 4번인 "5"입니다.
즉, 문자열의 맨 뒤(length() - 1)부터 맨 앞(0)을 향해 거꾸로 걸어가면서 글자를 하나씩 읽으면,
복잡한 뒤집기기능을 쓸 필요 없이 꺼내는 순서 자체가 알아서 뒤집히게 됩니다.
4. index 변수를 따로 만든 이유 (핵심 디테일)
int index = 0; / index = index + 1;
반복문을 제어하는 변수 i는 지금 뒤에서부터 앞으로 오고 있기 때문에 값이 4 ➔ 3 ➔ 2 ➔ 1 ➔ 0으로 줄어듭니다.
하지만 정답을 담을 answer 배열은 무조건 0번 칸부터 차례대로 0 ➔ 1 ➔ 2 ➔ 3 ➔ 4 순서로 채워야 합니다.
i를 배열 방 번호로 그대로 쓸 수 없기 때문에, index를 0으로 만들어두고
칸을 채울 때마다 정직하게 1씩 늘려가는 방식으로 풀이했습니다.
5. 가장 안전한 메서드들의 조합
substring()과 Integer.parseInt()
"문자열 자르기(substring)"와 "문자열을 숫자로 바꾸기(Integer.parseInt)"라는 안전한 메서드 조합을 사용하여
코드의 가독성을 극대화했습니다.
풀이한 코드🔽
class Solution {
public int[] solution(long n) {
String str = "" + n;
int[] answer = new int[str.length()];
int index = 0;
for (int i = str.length() - 1; i >= 0; i--) {
String letter = str.substring(i, i + 1);
answer[index] = Integer.parseInt(letter);
index = index + 1;
}
return answer;
}
}
'Daily 코드카타' 카테고리의 다른 글
| [코드카타] 코딩테스트입문 : 정수 제곱근 판별 - 2026.06.26 풀이 (0) | 2026.07.10 |
|---|---|
| [코드카타] 코딩테스트입문 : 문자열을 정수로 바꾸기 - 2026.06.25 풀이 (0) | 2026.06.25 |
| [코드카타] 코딩테스트입문 : x만큼 간격이 있는 n개의 숫자- 2026.06.24 풀이 (0) | 2026.06.24 |
| [코드카타] 코딩테스트입문 : 나머지가 1이 되는 수 찾기 - 2026.06.22 풀이 (0) | 2026.06.22 |
| [코드카타] 코딩테스트입문 : 약수의 합 - 2026.06.22 풀이 (0) | 2026.06.22 |