study/CodingTest
자연수 뒤집어 배열로 만들기 (자료형 처리 / linkedlist / while)
고기만두(개발자)
2022. 12. 13. 21:41
728x90
반응형
문제 출처 - 프로그래머스
문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
- n은 10,000,000,000이하인 자연수입니다.
12345 | [5,4,3,2,1] |
%10 을 해서 나머지를 구하고, /10을 해서 자릿수를 하나씩 줄여나간다.
그리고 0이 될 때까지 자릿수 줄임을 반복하기 위한 while문을 바로 생각해 낼 수 있었다.
하지만 한 가지 함정이, 이 문제 인풋이 long 타입으로 들어오는데 int로 리턴을 뱉어야 한다.
long <->int 간의 변환을 위해 여러 방법을 사용해봤으나 먹히지 않았다. 대체 왜지..?
이 문제의 의도한 바가 그게 아닌거였나,,,
그래서 long을 String으로 캐스트해서 자릿수를 구하고 시작했다.
x.length()를 사용할 거였으면 for(int i = 0; i < x.length; i++) 문 돌려도 될 뻔 했다.
import java.lang.*;
class Solution {
public int[] solution(long n) {
String x = "" + n;
int[] answer = new int[x.length()];
int a = 0;
int i = 0;
while (n > 0){
a = (int)(n % 10);
answer[i] = a;
n = n / 10;
i++;
}
return answer;
}
}
지금 듣고 있는 강의에서 의도한 바는 LinkedList 의 사용
링크드리스트에 add 하고 한줄로 바로 변환 때리는 방법도 있음
import java.util.*;
class Solution {
public int[] solution(long n) {
List<Integer> list = new LinkedList<>();
while (n > 0){
list.add((int) (n%10));
n /= 10;
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
대부분의 케이스에서 속도가 확실히 줄긴 했다
수학적인 접근을 생각해내는 건 연습장에 조금만 끼적거리다 보면 예전부터도 많이 어렵지는 않은데
비전공 출신은 기술적인 접근이 약해서, 여러 사이트에서 꾸준히 문제를 풀어봐야 할 것 같다.
728x90
반응형