[프로그래머스/181921] 배열 만들기2
in Study / Coding Test
☑️ 문제
☑️ 풀이
- 문자열 형태로 변형 후 5와 0을 포함한 숫자인지 확인을 하도록 하였다.
- 출력형식이
int[]
라 List를 Array 형태로 변형하는 과정에서 Stream을 사용하였다.
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
List<Integer> list = new ArrayList<>();
for (int i = l; i <= r; i++) {
if (i % 5 == 0) {
boolean flag = true;
String s = Integer.toString(i);
for (int j = 0; j < s.length(); j++) {
if (s.charAt(j) != '5' && s.charAt(j) != '0') {
flag = false;
break;
}
}
if (flag) {
list.add(i);
}
}
}
if (list.isEmpty()) {
list.add(-1);
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
☑️ Array → List
원시 타입의 Array인 경우
- 리스트는 원시타입(Primitive type)을 지원하지 않기 때문에 Stream의 boxed()를 이용하여 래퍼 타입(Wrapper type)으로 박싱한 후 List로 변환해야 한다.
int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream(arr)
.boxed() // 기본 타입 -> 래퍼 타입
.collect(Collectors.toList());
래퍼 타입의 Array인 경우
List.of()
또는Arrays.asList()
를 사용한다.List.of()
는 변경 불가능하다.
Integer[] arr = {1, 2, 3};
List<Integer> list1 = Arrays.asList(arr);
List<Integer> list2 = List.of(arr);
☑️ 문법 정리 - List → Array
원시 타입의 Array로 변경하는 경우
- 반복문 사용
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
list.add(i);
}
int[] arr = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i);
}
- stream 사용
mapToInt()
: 기본형 특화 스트림 즉, intStream을 반환한다.
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
list.add(i);
}
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
래퍼 타입의 Array로 변경하는 경우
toArray()
사용
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
list.add(i);
}
Integer[] arr = list.toArray(Integer[]::new);