본문 바로가기

Programmers

[Java] 프로그래머스 Lv.1 : 나누어 떨어지는 숫자 배열

1. 문제

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

 

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

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

programmers.co.kr

 

2. 풀이

  • 문제의 핵심은 간단하다. 배열과 정수를 파라미터로 받아 각 배열 안에 값을 가지고 파라미터로 받은 정수와 나누었을 때 딱 나누어 떨어지는 값을 찾아 배열에 담고, 오름차순으로 정렬해서 return 하면 되고, 나누어 떨어지는 값이 없으면 -1을 담아 return 한다.
  • 배열의 크기를 조절하기 위해 count 변수에 나누어 떨어지는지 비교한고, count에 1씩 증가시킨다.
  • 나누어 떨어지는 값이 없어 count 가 0이라면 -1을 새로운 배열에 담아 리턴하고, 그렇지 않으면 count 된 크기만큼 배열을 만들고, 다시 count를 초기화한다. (count에 값을 다시 담기 위한 초기화)
  • 다시 배열과 정수 값을 비교해서 해당하면 count 번째에 그 값을 넣고 count를 1씩 증가시키고 정렬 후, return 

3. 코드

package programmers;

import java.util.Arrays;

public class Ex_DividedNumberArrangement {
    public static void main(String[] args) {
        int[] arr = new int[]{2, 36, 1, 3};
        int divisor = 1;

        System.out.println(Arrays.toString(solution(arr, divisor)));
    }

    public static int[] solution(int[] arr, int divisor) {

        int count = 0;

        for (int k : arr) {
            if (k % divisor == 0) {
                count++;
            }
        }
        if (count == 0) {
            return new int[]{-1};
        } else {
            int[] numArr = new int[count];
            count = 0;
            for (int j : arr) {
                if (j % divisor == 0) {
                    numArr[count] = j;
                    count++;
                }
            }
            Arrays.sort(numArr);
            return numArr;
        }
    }
}