본문 바로가기

Plo Algorithm

프로그래머스 Lv1 없는 숫자 더하기

없는 숫자 더하기

 

import java.util.*;
import java.util.ArrayList;
import java.util.stream.Collectors;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        ArrayList<Integer> index = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9,0));
        ArrayList<Integer> intArr = (ArrayList<Integer>)Arrays.stream(numbers).boxed().collect(Collectors.toList());
        index.removeAll(intArr);
        System.out.println(index);
        
        if (1<= numbers.length && numbers.length <=9){
            for (int i = 0 ; i < index.size() ; i++){
                answer += index.get(i); 
            }
        }

        return answer;
    }
}

ArrayList<Integer> index = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9,0));


- 제네릭스 -

List나 ArrayList를 선언할 때 객체에 사용할 데이터 타입을 <>안에 미리 정의해 놓는 것

IntegerType의 변수를 할당받을 List객체를 선언했다.

 

- Arrays.asList() -

Arrays.asList는 일반 배열을 ArrayList로 변환한다.

이번 문제에서는 ArrayList에서의 .reoveAll()함수를 사용하기 위해
배열을 ArrayList로 선언했다.

 

        - ArrayList<Integer> intArr -

객체로 받는 numbers 배열을 index.removeAll(Collection<?>c) 함수의

인자값으로 사용하기 위하여 ArrayList로 변환후 할당 하기위한 객체를 선언했다.


-(ArrayList<Integer>)Arrays.stream(numbers).boxed().collect(Collectors.toList());-

 

- Arrays.stream() - 

numbers를 ArrayList배열 할당함과 동시에 stream을 사용

 

-boxed()-

int , long , float 등의 primitive 자료형을 Integer 등의 wrapper type 데이터로 변환해줌

ArrayList에 Integer를 할당받기로 제네릭스에 선언했기 때문에 int를 변환

 

-collect(Collectors.toList())-

Stream을 List로 변환하는 함수

 

길게 정리했지만 한줄 요약하면 primitive 타입의 파라미터를 ArrayList에 할당하기 위하여 wrapper Type으로 형변환 후 할당


-ArrayList.removeAll(Collection)-

인자로 전달된 Collection과 ArrayList를 비교해 중복값을 삭제하는 함수