자바 초급문제로 맨땅에 해딩하기

자바 초급문제 18. 나누어떨어지는숫자배열

Jungsoomin :) 2020. 4. 11. 01:38

프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/12910)

자바 초급 문제의 나누어 떨어지는 숫자 배열 이다.

 

문제 설명

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

제한사항

  • arr은 자연수를 담은 배열입니다.

  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.

  • divisor는 자연수입니다.

  • array는 길이 1 이상인 배열입니다.

 

재미있어하며 풀었던 다른 문제이다.  오늘은 하루종일 문제를 풀면서 신나했다.

주석을 보면 무슨 생각을하며 코드를 적어내려갔는지 아실거라고 생각이 든다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package programmers_나누어떨어지는숫자배열;
 
import java.util.*;
 
public class subClass {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = new int[1];
        // arr은 숫자의 배열 divisor는 나누는 수
        // arr의 수를 divisor로 나누어봤을 때 나누어지는 수가 있으면 나누어지는 수를 배열에 담아 리턴
        // 나누어지는 수가 아무것도 없으면 -1 리턴
        int[] reverse = new int[arr.length];
        Arrays.sort(arr); // 내림차순 정렬
        ArrayList<Integer> saveList = new ArrayList<>();// 약수를 넣어 줄 임시 리스트
        boolean check;// false
 
        for (int i = 0; i < arr.length; i++) {
            reverse[i] = arr[arr.length - 1 - i];
        } // 역순으로 값 나열
 
        for (int i = 0; i < reverse.length; i++) {// reverse 의 인덱스 1개당 나눌 수들이 있다는 것을 알아둬야한다.
            if (reverse[0< divisor) {// 나누는 수가 배열의 가장 큰수보다 크다면 나눌 수 없게됨 그외 만약 나눌 수 있는 수가 없을때를 가정해야함
                saveList.add(-1);
                break;
            } else {// 아니면 나눗셈 시작 만약 reverse[i] % divisor 가 0 이 나오면 reverse[i]를 answer에 대입시켜야함 즉
                    // answer의 초기값은 계속변함
                if (reverse[i] % divisor == 0) {
                    saveList.add(reverse[i]);// saveList에 reverse[i] 값 대입
                }
                continue;// <<< 쓸데없는 코드가 아닐까?
            }
            // 여기에 제어문 포인트를 줘야할 듯 함.
        } // for 문이 다 돌았는데 saveList.size()가 0 라면 아무것도 나눌 수가 없었다는 건데
 
        if (saveList.size() > 0) {
            answer = new int[saveList.size()];// saveList 만큼의 배열로 확장
            for (int i = 0; i < answer.length; i++) {
                answer[i] = saveList.get(i);
                System.out.println(answer[i]);
            }
 
            Arrays.sort(answer);
        } else if (saveList.size() == 0) {
            answer = new int[1];
            answer[0= -1;
        }
        return answer;
    }
}
cs