본문 바로가기
코딩 테스트/[JAVA] programmers 코딩 테스트 연습

[Programmers/JAVA] 나누어 떨어지는 숫자 배열 / 프로그래머스 코딩 테스트 연습

by M개발자 2021. 7. 17.
반응형

나누어 떨어지는 숫자 배열

 


문제 설명

 

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;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % divisor == 0) cnt++;
        }

        if(cnt == 0) {
            int[] answer = {-1};
            return answer;
        } 
        
        int[] answer = new int[cnt];
        
        for(int i = 0, j = 0; i < arr.length; i++){
            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];
                    answer[j] = answer[j+1];
                    answer[j+1] = temp;
                }
            }
        }
        
        return answer;
    }
}

첫번째 도전 코드

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

2. 배열 길이 구하기

3. AraayList 값 배열에 저장

4. 배열 정렬

 

배열 길이를 구하는 과정에서 정확성 테스트 9번이 통과되지 않았다.....!!@!!@!@!

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;
    }
}

github

programmers

반응형

댓글