본문 바로가기
코드문제풀이/JAVA

[자바] 나누어 떨어지는 숫자 배열

by 똥쟁이핑크 2023. 7. 12.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제설명

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]을 리턴합니다.

 

나의 문제 풀이

1) 먼저 약수를 셀 수 있는 count 변수를 만들고 약수를 세었다.

2) count한 수가 0이면 -1을 리턴 할 조건식을 만들었다.

3) 약수의 개수 만큼 answer의 배열크기를 다시 만들었다.

4) 여기서 간과한것이 for문을 돌면서 index 설정도 다시 해줬어야 하는데 그러지 않아서 푸는데 시간이 많이 걸렸다.

5) a라는 변수가 0인데 answer의 배열을 0부터 시작하게끔 설정했다.

6) 그리고 처음 문제를 풀기 시작했을 때부터 sort를 사용하려고 했기 때문에 import java.util.*를 해주었고 sort를 사용할 수 있었다.

 

import java.util.*;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        
        int count = 0;
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % divisor == 0){
                count++;
            }
        }
        
        if(count == 0){
            int[] answer = {-1};
            return answer;
        }
        
        int a = 0;
        int[]  answer = new int[count];
        for(int i = 0; i < arr.length; i++){
            if(arr[i] % divisor == 0){
                answer[a++] = arr[i];
            }
        }
        Arrays.sort(answer);
        return answer;
    }
}