6. [Java] 약수구하기 - list.toArray(new String[0]);
https://school.programmers.co.kr/learn/courses/30/lessons/120897
틀린 코드
import java.util.*;
class Solution {
public int[] solution(int n) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i <= n; i++) {
if(n%i==0) list.append(i);
}
int[] answer = list.toArray(new String[0]);
return answer;
}
}
✅ for (int i = 0; i <= n; i++)
- ❗ i = 0일 때 n % 0은 ArithmeticException (0으로 나눌 수 없음!)
- ✅ 따라서 i = 1부터 시작해야 한다.
✅ list.add(i)
- ArrayList에서 값을 추가할 때는 append()가 아니라 add()를 사용해야 한다.
- list.append(i) → list.add(i)
✅ int[] answer = list.toArray(new String[0]);
- List → Array 로 변환할때 참조형은 toArray() 메서드로 가능하지만 int 같은 기본형은 직접 변환할 수 없다.
- 직접 반복문을 돌려서 변환해야 한다.
개선한 코드
import java.util.*;
class Solution {
public int[] solution(int n) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
if(n%i==0) list.add(i);
}
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
Stream 사용 버전
import java.util.*;
import java.util.stream.*;
class Solution {
public int[] solution(int n) {
return IntStream.rangeClosed(1, n) // 1부터 n까지 숫자 생성
.filter(i -> n % i == 0) // 약수만 필터링
.toArray(); // int[]로 반환
}
}
List → Array 형변환
List 타입 | 변환 방법 |
---|---|
|
|
|
|
| 반복문으로 수동 변환 필요 |
✅ 1. List → Array (참조형, 예: Integer, String 등)
- toArray() 메서드로 변환이 가능하다.
List<String> list = Arrays.asList("a", "b", "c");
String[] arr = list.toArray(new String[0]);
- list.toArray(new String[0]): 타입을 명시한 배열로 변환
- new String[0]은 사이즈가 0이어도 자동으로 맞춰준다.
List<Integer> list = Arrays.asList(1, 2, 3);
Integer[] arr = list.toArray(new Integer[0]);
✅ 2. List → Array (기본형, 예: int)
- Java의 List<Integer>는 int[]로 직접 변환 불가능
- 직접 반복문으로 넣어줘야 한다.
List<Integer> list = Arrays.asList(1, 2, 3);
int[] arr = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i); // 언박싱 자동 수행
}
Array → List 형변환
변환 방법 | |
---|---|
|
|
|
|
| Arrays.stream(arr).boxed().collect(Collectors.toList()) |
✅ 1. 참조형 배열 → List (예: String[], Integer[] 등)
String[] arr = {"a", "b", "c"};
List<String> list = Arrays.asList(arr);
- Arrays.asList()는 배열을 고정 크기 리스트로 바꿔준다.
- 추가/삭제는 불가능 → 변경 가능한 리스트로 바꾸려면
List<String> modifiableList = new ArrayList<>(Arrays.asList(arr));
✅ 2. 기본형 배열 → List (예: int[], double[] 등)
- 자바의 int[]는 바로 List<Integer>로 바꿀 수 없다.
- Stream + boxed()를 활용한다.
int[] arr = {1, 2, 3, 4};
List<Integer> list = Arrays.stream(arr) // IntStream 생성
.boxed() // int → Integer (박싱)
.collect(Collectors.toList());