나누어 떨어지는 숫자 배열

문제정의


나누는 수를 주었을 때 배열 중 나누어 떨어지는 수를 오름차순으로 담아 반환하는 문제이다. 만약 나누어 떨어지는 수가 하나도 없으면 -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
import java.util.*;

public class Mod0Arr {

public static void main(String[] args)
{
int[] arr = {5, 9, 7, 10};
int divisor = 5;
ArrayList<Integer> list = new ArrayList<>();
for(int num : arr)
{
if(num%divisor == 0)
list.add(num);
}
if(list.size() == 0)
{
int[] answer = {-1};
}
else
{
Collections.sort(list);
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++)
answer[i] = Integer.parseInt(list.get(i).toString());
}
}

}

부분부분 살펴보자
1
2
3
4
5
6
7
8
int[] arr = {5, 9, 7, 10};
int divisor = 5;
ArrayList<Integer> list = new ArrayList<>();
for(int num : arr)
{
if(num%divisor == 0)
list.add(num);
}
어레이리스트를 선언하고 배열을 순회하면서 만약 딱 나누어 떨어지는 수라면 리스트에 원소를 집어넣는다. 이 부분의 시간복잡도는 \(O(n)\)이다.

1
2
3
4
5
6
7
8
9
10
11
if(list.size() == 0)
{
int[] answer = {-1};
}
else
{
Collections.sort(list);
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++)
answer[i] = Integer.parseInt(list.get(i).toString());
}

만약 아무 원소도 들어가있지 않다면 -1을 넣어 반환하고 그렇지 않다면 리스트를 정렬하여 정답배열에 답을 넣는다. 이 부분에서 시간복잡도는 정렬이 있기 때문에 \(O(nlogn)\)이다.

테스트



화면이 작아 약간 잘렸는데 아무튼 다 맞았다.