✏️오늘의 문제 : 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열로 리턴하기
public int[] solution(long n) {
String word = Long.toString(n);
int[] answer = new int[word.length()];
int index = word.length() - 1;
int a = 0;
for (int i = index; i >= 0; i--) {
answer[a] = word.charAt(i) - '0';
a++;
}
return answer;
}
먼저, 문자열에서 각 자리수를 개별 문자로 추출하기 위해 charAt 메서드를 사용해 특정 인덱스에 있는 문자를 반환합니다. 이후, 각 문자의 ASCII 값을 활용하여 숫자로 변환하는데, 예를 들어 문자 '0'의 ASCII 값은 48이고, 문자 '3'의 ASCII 값은 51입니다. 이러한 ASCII 값을 이용하여 정수로 변환할 수 있는데, 문자 '3'의 경우 51에서 48을 빼면 3이라는 정수 값을 얻을 수 있습니다. 이렇게 변환한 정수를 배열에 담았습니다.
public int[] solution(long n) {
int index = Long.toString(n).length();
int[] answer = new int[index];
int i = 0;
while(n>0) {
answer[i] = (int)n%10;
i++;
n/=10;
}
return answer;
}
자연수라는 점을 중점에 두고 10으로 나누어 나머지를 배열에 담는 방식으로 문제를 풀어보았습니다. int []는 배열의 크기를 정해주어야하기에 문자열로 바꾸어 자리수를 구해서 넣어줘야한다는 것이 아쉬웠습니다. 동적 배열인 ArrayList를 사용하면 더 깔끔할것 같습니다.
public ArrayList<Integer> solution(long n) {
ArrayList<Integer> answer = new ArrayList<Integer>();
int i =0;
while(n>0) {
answer.add((int) (n%10));
i++;
n/=10;
}
return answer;
}
배열을 기반으로 한 컬렉션의 하나이며, 데이터를 추가, 삭제시 내부에서 동적으로 배열의 길이를 조절해준다.
동적 크기
ArrayList는 요소의 추가 및 삭제가 가능하여, 배열과 달리 크기가 동적으로 변화합니다. 초기 크기를 설정할 수 있지만, 필요에 따라 자동으로 크기가 조절됩니다.
인덱스 기반 접근
ArrayList는 인덱스를 사용하여 요소에 접근합니다. 이는 빠른 검색과 수정이 가능하다는 장점이 있습니다.
중복 요소 허용
ArrayList는 중복된 요소를 허용합니다. 동일한 값을 여러 번 추가할 수 있습니다.
null 값 허용
ArrayList는 null 값을 요소로 저장할 수 있습니다. 따라서 null 값도 리스트에 추가할 수 있습니다.
성능
ArrayList의 요소 추가는 평균적으로 O(1)의 시간 복잡도를 가지지만, 배열의 크기가 초과할 경우 O(n)으로 증가할 수 있습니다. 요소 삭제는 평균적으로 O(n)입니다.
제네릭 지원
ArrayList는 제네릭을 지원하여, 특정 타입의 객체만 저장하도록 제한할 수 있습니다. 이를 통해 타입 안전성을 높일 수 있습니다.
순서 유지
ArrayList는 요소를 추가한 순서를 유지합니다. 따라서 리스트에 저장된 요소들은 항상 추가된 순서대로 정렬됩니다.