Back-end/Algorithm

[프로그래머스] 스킬 체크 테스트 level1 - 나누어 떨어지는 숫자 배열

Nellie Kim 2022. 9. 16. 16:55
728x90

문제 설명

 

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


예시

 

arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]

코드 해석 및 전체 코드

 

1. 배열 길이를 구하기

2. 나누어 떨어지는 값이 없으면 배열 값 -1 반환

3. 구한 배열 길이 만큼 배열 선언

4. 나누어 떨어지는 값 배열에 저장

5. 정렬

 

class Solution {
    public int[] solution(int[] arr, int divisor) {
        
        int cnt = 0; // ★ cnt변수를 설정하여 나누어떨어지는수가 몇개있는지 체크
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % divisor == 0) cnt++;
        }

        if(cnt == 0) {  //★ 하나도 나누어떨어지는 수가 없으면 -1리턴! 배열은 {}안에 넣어줘야해!!
            int[] answer = {-1};
            return answer;
        } 
        
        int[] answer = new int[cnt];  //★ answer배열을 cnt개수만큼 새로 만들기!!
        
        for(int i = 0, j = 0; i < arr.length; i++){  //★ 나누어떨어지는수가 있으면 answer배열에 담기!
            if(arr[i] % divisor == 0) answer[j++] = arr[i]; 
        }
        
       for(int i = 0; i < cnt - 1; i++){ //★ 마지막으로 정렬! 
            for(int j = 0; j < cnt - 1 - i; j++){
                if(answer[j] > answer[j +1]){
                    int temp = answer[j];  //★ temp변수를 설정해서 자리를 바꿔주도록 할 것!
                    answer[j] = answer[j+1];
                    answer[j+1] = temp;
                }
            }
        }
        
        return answer;
    }
}

첫번째 도전 코드

1. ArrayList 선언 및 divisor로 나누어 떨어지는 값 추가

2. 배열 길이 구하기

3. AraayList 값 배열에 저장

4. 배열 정렬

 

import java.util.ArrayList;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        
        ArrayList<Integer> list = new ArrayList<Integer>();
        
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % divisor == 0) list.add(arr[i]);
        }
	
    	int length = list.size() != 0 ? list.size() : 1;
        
        int[] answer = new int[length];
        
        if(length == 1) {
        	answer[0] = -1;
            return answer;
        }
        
        for(int i = 0, j = 0; i < length; i++){
            answer[i] = list.get(i);
        }
        
       for(int i = 0; i < length - 1; i++){
            for(int j = 0; j < length - 1 - i; j++){
                if(answer[j] > answer[j +1]){
                    int temp = answer[j];
                    answer[j] = answer[j+1];
                    answer[j+1] = temp;
                }
            }
        }
        
        return answer;
    }
}