본문 바로가기
Computer/Algorithm_Java

[Programmers] 나누어 떨어지는 숫자 배열 (Success)

by HJ0216 2023. 9. 19.
 

프로그래머스

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

programmers.co.kr

 

Language: Java

 

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
import java.util.Arrays;
 
class Solution {
    public int[] solution(int[] arr, int divisor) {
        
        // 1. divisor로 나누어 떨어지는 값
        // 2. 오름차순
        // 3. 나누어 떨어지는 값이 없을 경우, 배열에 -1 담아 return
        
        int[] answer = {};
        
        int num = 0;
        for(int i : arr){
            if(i%divisor==0){
                num++;
            }
        }
        
        if(num==0){
            answer = new int[]{-1};
        } else {
            answer = new int[num];
            for(int i : arr){
                if(i%divisor==0){
                    answer[--num] = i;
                }
            }
            Arrays.sort(answer);
        }
        
        return answer;
    }
}
 
 

🤔 해설

1. if(num==0){ ... }

    - 나누어 떨어지는 수가 없을 경우, 조건문 처리

2. Arrays.sort(answer);

    - 입출력 예제에 맞춰 오름차순 정렬

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Arrays;
 
class Solution {
    public int[] solution(int[] arr, int divisor) {
        
        int[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray();
        if(answer.length == 0) answer = new int[] {-1};
        Arrays.sort(answer);
        
        return answer;
    }
}
 
 

1. filter(factor -> factor % divisor == 0)

    - stream.filter: 조건 처리

 

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
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
 
class Solution {
    public int[] solution(int[] arr, int divisor) {
        
        // 1. divisor로 나누어 떨어지는 값
        // 2. 오름차순
        // 3. 나누어 떨어지는 값이 없을 경우, 배열에 -1 담아 return
        
        int[] answer = {};
        
        List<Integer> list = new ArrayList<>();
        
        int num = 0;
        for(int i : arr){
            if(i%divisor==0){
                list.add(i);
            }
        }
        
        if(list.size()==0){
            answer = new int[]{-1};
        } else {
            answer = list.stream().mapToInt(i -> i).toArray();
            Arrays.sort(answer);        
        }
        
        return answer;
    }
}
 
 

1. mapToInt(i -> i);

    - 스트림의 각 요소를 정수로 매핑

2. toArray();

    - 기본적인 return type은 Object[]

    - 스트림의 요소 타입이 int로 결정되었기 때문에 toArray 메서드는 int[] 배열을 반환

        * 스트림의 요소 타입을 명시적으로 지정하면 해당 타입의 배열 return 가능

 

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

프로그래머스

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

programmers.co.kr