알고리즘 : 프로그래머스 : JAVA : 나누어 떨어지는 숫자 배열

2022. 1. 17. 14:21알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

import java.util.*;
class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        ArrayList<Integer> a1 = new ArrayList<Integer>();
        
        for(int i = 0; i <arr.length; i++){
            if(arr[i]%divisor == 0){
                a1.add(arr[i]);
            }
        }
        
        if(a1.isEmpty()){
            a1.add(-1);
        }
        
        answer = new int[a1.size()];
        
        for(int i = 0; i<a1.size() ; i++){
            answer[i] = a1.get(i);
        }
        
        Arrays.sort(answer);    // 오름차순 정렬
        return answer;
    }
}

1. int[] 타입으로 반환할 answer 변수를 초기화하여 선언.
2. ArrayList인 a1을 Integer 타입으로 선언.
3. for 문을 사용하여 arr 배열에 있는 원소를 divisor로 나누었을 때 나머지가 0인 원소만 add를 사용하여 a1에 추가.
4. a1이 비어있을 경우 a1에 add를 이용하여 -1을 추가.
- a1이 비어있다는 말은 arr 배열에 있는 모든 원소가 divisor로 나누었을 때 나머지가 0이 아닐 경우를 뜻함.
5. answer의 크기를 a1의 size 만큼으로 설정.
6. for문을 사용하여 a1에 있는 원소를 get으로 꺼내서 answer에 저장.
7. answer을 Arrays.sort를 이용해 정렬.
8. return을 사용하여 answer을 반환.


<다른 방법>

import java.util.ArrayList;
import java.util.Collections;

class Solution {
    // 1. 반환타입을 ArrayList<Integer>로 변경.
    public ArrayList<Integer> solution(int[] arr, int divisor) {
        
        // 2. ArrayList 객체 생성.
        ArrayList<Integer> a = new ArrayList<Integer>();
        
        // 3. arr 배열을 탐색하며 divisor과 나눈 나머지가 0인 경우 ArrayList 객체에 삽입.
        for(int i=0;i<arr.length;i++){
            if(arr[i] % divisor == 0) a.add(arr[i]);
        }
        
        // 4. 위 과정을 마쳤을 때 ArrayList객체의 요소가 비어있다면 -1을 삽입.
        if(a.isEmpty()) a.add(-1);
        
        // 5. 오름차순 정렬.
        Collections.sort(a);
        
        return a;
    }
}

 이 문제는 주어진 배열을 탐색하면서 divisor로 나눈 나머지가 0인 원소들을 배열에 담아 반환하면 되는 문제이다. 
하지만 문제상으로 solution 메서드의 반환 값인 int [] 타입인 배열은 크기가 고정되어 있기 때문에 입출력 예와 같이 동적인 결과를 반환할 수 없다. 
따라서 요소의 추가가 용이한 ArrayList 클래스를 사용했다.

반응형