본문 바로가기

ALGORITHM

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

 

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

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

programmers.co.kr

⏱소요 시간 - 17분

 

🔑해결 방법

 

문제 푸는 과정을 먼저 적어놓고 코딩을 해서 금방 풀었던 문제. 문제가 쉽기도 했다.

 

1. arr[]을 정렬한다.

2. arr[]을 돌면서 각 요소들을 divisor로 나눈 나머지(arr[i] % divisor)가 0이면 arr[i]를 list에 추가한다.

3. 만약 list.size()가 0이면 list에 -1을 추가한다.

4. list를 answer[] 형태로 바꿔준다.

 

배열에 값을 계속 추가해야 하는 문제로 배열이 계속 유동적으로 변해야 한다.

이는 이론적으로 불가능한 일이므로 리스트를 사용했다.

예전 같았다면 배열에 추가하려고 삽질했을 텐데 배열은 고정적이라는 걸 잊지 말자!

 

 

🔎소스 코드

 

package step1;

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

// 나누어 떨어지는 숫자 배열
public class Ex11 {

	public static void main(String[] args) {
		
		int[] arr = { 5, 9, 7, 10 };
		int divisor = 5;
		
		System.out.println(solution(arr, divisor));
		
	}
	
	public static int[] solution(int[] arr, int divisor) {
		
		Arrays.sort(arr);
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		for(int i = 0; i < arr.length; i++) {
			
			if(arr[i] % divisor == 0) {
				list.add(arr[i]);
			}
			
		}

		if(list.size() == 0) {
			list.add(-1);
		}
		
		int[] answer = new int[list.size()];
		
		for(int i = 0; i < list.size(); i++) {
			answer[i] = list.get(i);
		}
		
		return answer;
	
	}

}