문제 설명
자연수 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형 값을 제대로 받을 수 있다면 정상적으로 작동할 것입니다. 하지만 고치는 방법을 모르겠어서 결국 새로운 코드를 짜서 제출했습니다.
'프로그래머스 > Lv. 1' 카테고리의 다른 글
[프로그래머스 코딩테스트] 부족한 금액 계산하기(Java) (0) | 2023.04.05 |
---|---|
[프로그래머스 코딩테스트] 내적(Java) (0) | 2023.04.05 |
[프로그래머스 코딩테스트] 음양 더하기(Java) (0) | 2023.04.05 |
[프로그래머스 코딩테스트] 나머지가 1이 되는 수 찾기(Java) (0) | 2023.04.04 |
[프로그래머스 코딩테스트] 두 정수 사이의 합(Java) (0) | 2023.04.04 |