KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | Algorithm CODEKATA
🔢 자연수 뒤집어 배열로 만들기
🏷 관련 주제 : 반복문 연산자 split
문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
n은 10,000,000,000이하인 자연수입니다.
입출력 예
| n | return |
|---|---|
| 12345 | [5,4,3,2,1] |
✔ Solution with Loop & Arithmetic Operator
class Solution {
public int[] solution(long n) {
int[] answer = new int[(int) Math.log10(n) + 1];
int idx = 0;
while (n != 0) {
answer[idx++] = (int) (n % 10);
n /= 10;
}
return answer;
}
}
채점 결과

✔ Solution with split & Loop
class Solution {
public int[] solution(long n) {
String[] strArr = (n + "").split("");
int[] answer = new int[strArr.length];
for (int i = strArr.length - 1; i >= 0; i--) {
answer[strArr.length - i - 1] = Integer.valueOf(strArr[i]);
}
return answer;
}
}
채점 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍
📌 오늘 만난 문제 : 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 반환해주세요.
처음에는
1) 매개변수로 받은 자연수 n을 문자열로 변환
2) split()으로 한 문자씩 분할 해 문자열 배열 strArr에 담고
3) 반복문의 변수를 조정해 문자열 배열의 끝 인덱스 문자열부터 꺼내
4) 꺼낸 문자열을 Integer.valueOf()메서드로 정수로 변환하여 정수형 배열 answer에 담아 반환
하는 방법으로 코드를 썼었는데
오늘 풀이를 작성하려고 문제를 다시 보니
나머지 연산자를 이용하여 코드를 작성할 수 있을 것 같아서 코드를 다시 써 보았다.
1. 자연수 n을 뒤집어 각 자리 숫자를 담을 정수형 배열 answer을 초기화
🖇 answer의 길이는 어떻게 구할까?
자연수 n의 자릿수는 상용로그의 지표를 이용하면 간단히 구할 수 있다.
고등학교 때, 배운 상용로그는 밑을 10으로 하는 로그로
$\scriptsize \log_{10}{n}\it(= \log{n})$의 정수 부분을 지표라고 하는데
지표는 다음의 성질을 만족한다. ($\log{n}$의 지표 ) + 1 = (n의 자릿수)
즉, (n의 자릿수) = Math.log10(n) + 1
int[] answer = new int[(int) Math.log10(n) + 1];
2. answer에 n의 각 자리의 숫자를 담을 인덱스 idx를 초기화
int idx = 0;
3. 반복문을 n이 0이 될 때까지 돌리면서 answer[idx]에 n을 10으로 나눈 나머지를 담고 n을 10으로 나누자.
자연수
n을10으로 나눈 나머지는n의 일의 자리 숫자이다.
즉, 위의 방법으로 자연수n의 일의 자리 숫자부터 차례대로answer에 담을 수 있다.
while (n != 0) {
answer[idx++] = (int) (n % 10);
n /= 10;
}
4. answer을 반환하자.
return answer;
💬 무엇을 새롭게 알았는지
중고등학교 수학 지식을 코딩에 응용하면 코드가 더 간단해질 수 있다는 것을 알게되었다.