프로그래머스 나누어 떨어지는 숫자 배열 문제풀이

김하영·2023년 3월 15일
0

문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12910

사용 자료구조 : ArrayList, 배열

여러 데이터를 받아 저장해 놓을 필요가 있기 때문에 ArrayList를 사용했다.


찾아낸 규칙

배열을 하나씩 순회하면서 divisor로 나눠 떨어지면 정답에 추가한다. 그리고 정답 배열을 오름차순으로 정렬한다. 만약 나눠떨어지는 수가 없다면 -1을 정답 배열에 추가한다.


코드

배열을 하나씩 순회하면서 divisor로 나눠 떨어지면 result ArrayList에 추가한다. 만약 나눠떨어지는 수가 없다면 -1을 result ArrayList에 추가한다. 리턴 형식을 맞춰주고 Arrays.sort(배열)를 사용하기 위해 ArrayList인 result를 스트림 연산을 통해 일반 배열로 바꿔준다. 바뀐 배열로 오름차순 정렬을 해주고 리턴해준다.

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer ;
        ArrayList<Integer> result = new ArrayList<>();

        for(int i : arr){
            if(i % divisor == 0){
                result.add(i);
            }
        }
        if(result.size() == 0){
            result.add(-1);
        }
        answer = result.stream().mapToInt(i-> i).toArray();
        Arrays.sort(answer);
        return answer;
    }

    public static void main(String[] args) {
        int[] ans = new Solution().solution(new int[]{5,9,7,10}, 5);
        for(int i:ans){
            System.out.print(i+" ");
        }
    }
}

교훈

나중에 answer배열을 정렬하는 것도 좋지만 배열을 먼저 Arrays.sort(arr)를 사용하여 sort해주고 시작하는것도 편할 것 같다는 생각이 든다.
배열에서 아무것도 나눠떨어지지 않는다면 -1을 출력해 주는 것을 잊지말자.
어떤 문제를 풀던지 예외처리를 잘 해줘야 한다는 사실을 상기했다!!!!!

또 까먹었다.. ArrayList를 일반 배열로 바꾸는 거..

ArrayList list = new ArrayList()
int[] arr = list.stream().mapToInt(i -> (int)i).toArray();

// ArrayList의 자료형을 정해줬을때는 자동으로 unboxing 되므로 스트림 연산에서 형변환 할 필요가 없다.
ArrayList<Integer> list2 = new ArrayList<>()
int[] arr = list2.stream().mapToInt(i -> i).toArray();
profile
백엔드 개발자로 일하고 싶어요 제발

0개의 댓글