[프로그래머스/181921] 배열 만들기2

☑️ 문제

프로그래머스 181921

☑️ 풀이

  • 문자열 형태로 변형 후 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);

© 2021. All rights reserved.

yaejinkong의 블로그