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]
을 리턴합니다.
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer;
int cnt = 0;
for ( int i = 0; i < arr.length; i++) {
if ( arr[i] % divisor == 0) cnt++;
}
if ( cnt >= 1) answer = new int[cnt];
else {
answer = new int[1];
answer[0] = -1;
return answer;
}
int j = 0;
for ( int i = 0 ; i < arr.length; i++) {
if ( arr[i] % divisor == 0) answer[j++] = arr[i];
}
Arrays.sort(answer);
return answer;
}
}
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int divisor) {
int[] answer;
int cnt = 0;
오름차순 정렬을 위한 Arrays.sort()
메서드를 이용하기 위해 java
의 util
파일에 있는 Arrays
클래스를 import
해서 가져온다.
반환타입이 int 배열
이므로 답을 저장할 변수인 answer
도 똑같이 int[]
로 선언해준다. 아직 답 개수가 얼마나 있는지를 모르기 때문에 생성 단계까지는 나아가지 않는다.
divisor
로 나누어 떨어지는 arr
안의 수가 몇 개인지를 저장할 cnt
변수를 0
으로 세팅한다.
for ( int i = 0; i < arr.length; i++) {
if ( arr[i] % divisor == 0) cnt++;
}
for문
을 arr
의 크기만큼 돌려서 arr
안의 divisor
로 나누어떨어지는 수가 몇 개인지를 파악한다.
만약 arr
안의 [i]
번째 방의 수를 divisor
로 나누었을 때 나머지가 0
이라면 나누어 떨어지는 수이기에 cnt
를 1
증가시켜준다.
if ( cnt >= 1) answer = new int[cnt];
else {
answer = new int[1];
answer[0] = -1;
return answer;
}
이제 답의 개수가 다 구해졌으므로 위에서 선언만 해주었던 answer
배열을 생성해줄 차례이다. 선언만 해줄 경우에는 방의 주소가 배정되지 않은 상태이기 때문에 값을 저장할 수 없다. 따라서 반드시 선언도 해주어야 한다.
만약 cnt
가 1
보다 크다면, 즉 arr
안에 divisor
로 나누어 떨어지는 수가 존재한다면 cnt
만큼 answer
방을 생성해준다.
만약 cnt
가 0
이라면, 즉 arr
안에 divisor
로 나누어 떨어지는 수가 존재하지 않는다면 answer
방의 개수를 1
로 잡고 선언한 뒤 answer[0]
방에 -1
을 넣고 answer
배열에 들어있는 값을 return
해준다. 여기서 왜 바로 return -1
을 해주지 않았냐면, 메서드 solution
의 반환타입이 int[]
이기 때문에 이에 따라 answer
배열에 값을 저장한 뒤 return
해준 것이다.
!주의! return answer[0]은 int배열이 아니라 int를 반환시키는 것임으로 반드시 배열명인 answer을 반환하도록 하자
int j = 0;
for ( int i = 0 ; i < arr.length; i++) {
if ( arr[i] % divisor == 0) answer[j++] = arr[i];
}
arr
의 요솟값을 나타낼 i
와, answer
의 요솟값을 나타낼 j
를 각각 0
으로 초기화시킨다.
for문
을 반복하여 돌리며 arr
안의 전체 수를 훑는다. divisor
로 나누어떨어지는 수를 만나면 arr[i]
의 값을 answer[j]
방에 저장한다. 여기서 j++
은 answer[j]
에 arr[i]
의 값이 저장된 후에 증가되므로 요솟값 부분에 증감식을 써도 상관없다.
Arrays.sort(answer);
return answer;
이렇게 모아진 answer
배열은 오름차순으로 정렬을 해주어야 하기 때문에 앞서 import
했던 Arrays
클래스의 sort()
메서드를 사용하여 answer
배열을 오름차순 정렬해준다.
그 후 오름차순 정렬된 answer
배열을 return
하여 프로그램을 종료한다.