끄적끄적 코딩일지

[Programmers]나누어 떨어지는 숫자 배열(난이도:★★★) 본문

알고리즘

[Programmers]나누어 떨어지는 숫자 배열(난이도:★★★)

BaekGyuHyeon 2022. 5. 16. 18:00

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

 

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

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

programmers.co.kr

import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int divisor) {
    	// stream 사용하기
        // int[] answer =Arrays.stream(arr).filter(e->e%divisor == 0).sorted().toArray();
        // return answer.length ==0?new int[]{-1}:answer;
        return anotherSolution(arr,divisor);
    }
    // 다른 해법
    public int[] anotherSolution(int[] arr,int divisor){
         int[] tmp = new int [arr.length];
        int idx = 0;
        int count = 0;
        // 나누어 떨어지는 숫자만 남기기
        for(int i : arr ){
            if(i % divisor == 0){
                tmp[idx] = i;
                idx++;
                count++;
            }
        }
        // 공백 배열 제거하기
        int[] answer = new int[count==0?1:count];
        if(count == 0){
            answer[0] = -1;
            return answer;
        }else{
            for(int i = 0 ; i < answer.length; i++){
                answer[i] = tmp[i];
            }
        }
        // 정렬하기
        int idxs = answer.length-1;
        for(int i = 0 ; i < answer.length-1; i++){
            for(int j = 0; j < idxs; j++){
                if(answer[j] > answer[j+1]){
                    int tmps = answer[j];
                    answer[j] = answer[j+1];
                    answer[j+1] = tmps;
                }
            }
            idxs--;
        }
        return answer;
    }
}