알고리즘

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

Heidong 2022. 6. 13. 01:25
반응형

 

내 풀이

import java.util.Arrays;

public class P_28 {

	public int[] solution(int[] arr, int divisor) {
        
        int cnt = 0;
        
        for(int i=0; i<arr.length; i++) {
        	if(arr[i] % divisor == 0) {
        		cnt++;
        	}
        }
        
        if(cnt == 0) {
        	return new int[] {-1};
        }
        
        int[] answer = new int[cnt];
        
        cnt = 0;
        for(int j=0; j<arr.length; j++) {
        	if(arr[j] % divisor == 0) {
        		answer[cnt] = arr[j];
        		cnt++;
        	}
        }
        
        Arrays.sort(answer);
        
        return answer;
    }
	
	public static void main(String[] args) {
		// 나누어 떨어지는 숫자 배열
		P_28 p = new P_28();
		int[] arr = {3,2,6};
		int div = 10;
		
		int[] ans = p.solution(arr, div);
		
		System.out.println(Arrays.toString(ans));
	}

}

조금 무식하게 푼 방법

배열의 방 크기 때문에 for문을 한번 더 돌렸다.

 

// 람다 stream filter 사용
	public int[] sol2(int[] arr, int divisor) {
		
		int[] ans = Arrays.stream(arr).filter(x -> x % divisor == 0).toArray();
		// arr 배열을 Arrays stream을 생성하고 filter를 통해 원하는 조건을 걸러낸다.
		// toArray() = ArrayList의 요소를 새 배열에 복사함.
		if(ans.length == 0) {
			return new int[] {-1};
		} else {
			Arrays.sort(ans);
		}
		
		return ans;
	}

람다를 활용하면 간단하게 풀 수 있다.

for문을 돌려가면서 해야 할 작업을 stream 객체를 만들어 filter() 메소드를 이용해서 걸러내면 된다.

반응형