프로그래머스

[프로그래머스_Level1] 나누어 떨어지는 숫자 배열

빙수빈수 2021. 7. 15. 18:17

https://programmers.co.kr/learn/courses/30/lessons/12910

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하

programmers.co.kr

[문제]

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

 

[제한 조건]

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

 

[코드]

import java.util.*;

class Solution {
public int[] solution(int[] arr, int divisor) {
        int[] answer={};
        ArrayList<Integer> list=new ArrayList<>();
        
        // 배열의 값이 divisor로 나눠 떨어진다면 리스트에 저장
        for(int i=0;i<arr.length;i++) 
        	if(arr[i]%divisor==0)
        		list.add(arr[i]);
        
        /* 
         * 리스트가 비어있다는 것은 divisor로 
         * 나눠 떨어지는 배열의 값이 하나도 없다는 의미이기 때문에 
         * 리스트에 -1저장
         */
        if(list.isEmpty())
        	list.add(-1);
        
        answer=new int[list.size()];
        
        // 리스트의 값을 answer 배열에 저장
        for(int i=0;i<list.size();i++)
        	answer[i]=list.get(i);
        
        // answer 배열 정렬
        Arrays.sort(answer);
        
        return answer;
    }
 }

 

[고찰]

 이번 문제는 divisor로 나눠 떨어지는 배열의 값을 저장하기 위해 리스트를 사용해야 한다는 점만 주의하면 쉽게 해결 할 수 있다. 바로 answer 배열에 저장하기 위해서는 answer 배열의 크기를 선언해야 한다. 하지만 for문 이전에 배열의 크기는 알 수 없기 때문에 우선 리스트에 조건을 만족하는 값을 저장 후 리스트의 크기를 이용하여 answer 배열을 선언해야 한다.