본문 바로가기
Language/Java

[Programmers | Java | 연습문제 풀이] 자연수 뒤집어 배열로 만들기 - Solution with Loop & Operator

by ㅇ달빛천사ㅇ 2024. 6. 12.
728x90

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. 반복문을 n0이 될 때까지 돌리면서 answer[idx]n10으로 나눈 나머지를 담고 n10으로 나누자.

자연수 n10으로 나눈 나머지는 n의 일의 자리 숫자이다.
즉, 위의 방법으로 자연수 n의 일의 자리 숫자부터 차례대로 answer에 담을 수 있다.


while (n != 0) {
    answer[idx++] = (int) (n % 10);
    n /= 10;
}

4. answer을 반환하자.

return answer;

💬 무엇을 새롭게 알았는지

중고등학교 수학 지식을 코딩에 응용하면 코드가 더 간단해질 수 있다는 것을 알게되었다.



📚 References(참고 자료)

728x90


Top