본문 바로가기

programmers-코딩테스트 연습/Level 1. 자바

2021-06-17 / 나누어 떨어지는 숫자 배열

문제 설명

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

 

제한 사항

  • arr은 자연수를 담은 배열이다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 이다.
  • divisor는 자연수이다.
  • array는 길이 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

arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10이다. 따라서 [5, 10]을 리턴한다.

 

입출력 예#2

arr의 모든 원소는 1으로 나누어 떨어진다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴한다.

 

입출력 예#3

3, 2, 6은 10으로 나누어 떨어지지 않는다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴한다.

 

초기 코드

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        return answer;
    }
}

 

정답 코드

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int divisor) {
       // int[] answer=new int[arr.length];
        int cnt=0;
        int j=0;
        
        for(int i=0;i<arr.length;i++){
            if(arr[i]%divisor==0) {
                //answer[i]=arr[i];
                cnt++;
            } 
        }
        //배열을 선언하기 위해 방 개수를 세는 포문
        
        if(cnt==0){	//나누어 떨어지는 수가 없을 경우 배열에 -1을 담아 리턴
            int[] a = new int[1];
            a[0]=-1;
            return a;
        } 
        int[] a = new int[cnt];	//새로운 배열을 cnt만큼 생성
        
        for(int i=0;i<arr.length;i++){
            if(arr[i]%divisor==0) {	//나누어 떨어지는 수 찾고 배열에 넣기
                a[j]=arr[i];
                j++;
            }
        }
        
        Arrays.sort(a);
        
        return a;
    }
}

 

코드 설명

배열을 정리하는 메서드는 Arrays.sort()이다. 이때 import java.util.Arrays를 임폴트 해줘야 사용가능하다. 기본적으로 오름차순으로 정렬하게 되어있다.

j가 필요한 이유 : j는 리턴할 배열 a의 인덱스 번호를 담당한다. 왜 i로 하지 않고 따로 인덱스 번호를 주었냐면 매개변수로 오는 arr의 길이와 새로 생성한 a의 배열 길이가 다르기 때문이다. a는 나누어 떨어지는 수의 개수만큼 생성했기 때문에 arr의 길이와 같을수도, 적을 수도 있다. 따라서 인덱스 번호를 따로 주어야 한다.

 

 

 

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

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

programmers.co.kr