프로그래머스/Lv. 1

[프로그래머스 코딩테스트] 자연수 뒤집어 배열로 만들기(Java)

Sigfriede 2023. 4. 5. 01:30

  문제 설명

  자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

 

  제한사항

  • n은 10,000,000,000이하인 자연수입니다.

 

  입출력 예

n return
12345 [5, 4, 3, 2, 1]
class Solution {
    public int[] solution(long n) {
        long num = n;
        int count = 0;
        
        while (num > 0) {
            num /= 10;
            count++;
        }
        
        int[] answer = new int[count];
        num = n;
        
        for (int i = 0; i < count; i++) {
            answer[i] = (int)(num % 10);
            num /= 10;
        }
        
        return answer;
    }
}

  while문으로 자릿수를 구하고 count가 1씩 증가합니다. 이렇게 구한 count는 자릿수만큼 배열의 크기를 생성합니다. while문을 통해 num의 값이 바뀌었으므로 n으로 다시 초기화 했습니다. for문은 i가 count보다 작을 때, answer[i]는 각 자릿수의 값이 할당됩니다. 값이 할당될 때, 자릿수는 일의 자리부터 할당되기 시작하므로 문제에서 원하는, 숫자를 뒤집은 배열이 됩니다.

 

import java.util.ArrayDeque;
import java.util.Deque;

class Solution {
    public int[] solution(long n) {
        int count = 0;
        Deque<Integer> deque = new ArrayDeque<>();
        while (n > 0) {
            deque.addFirst((int)n % 10);
            n /= 10;
            count++;
        }
        
        int[] answer = new int[count];
        for (int i = 0; i < count; i++) {
            answer[i] = deque.removeLast();
        }
        return answer;
    }
}

  위는 데크를 활용한 풀이입니다. 자료구조에 대해 배우기도 했고, 한번 써보고 싶다는 생각이 들었습니다. 테스트 케이스를 대부분 통과하는 것을 보아, 코드의 문제보다는 매개변수로 들어오는 값이 너무 큰 값이어서 그런 것 같습니다. long형 값을 제대로 받을 수 있다면 정상적으로 작동할 것입니다. 하지만 고치는 방법을 모르겠어서 결국 새로운 코드를 짜서 제출했습니다.