코딩 테스트
프로그래머스 코딩테스트 연습: 나누어 떨어지는 숫자 배열
로ᄏl
2019. 8. 30. 01:38
728x90
Q. 나누어 떨어지는 숫자 배열
접근 방법 : 나머지(%)의 개념만 잘 안다면 크게 어렵지 않은 문제라고 생각하였다.
풀이 방법 1) 흔한 방식으로 ArrayList를 사용
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
public static int[] solution(int[] arr, int divisor) {
Arrays.sort(arr); //오름차순으로 정렬
List<Integer> list = new ArrayList<>();
/**
* arr의 배열의 각 원소가 divisor의 배수인 것만 list에 저장
*/
for(int a : arr){
if(a % divisor == 0){
list.add(a);
}
}
//ArrayList에 아무값이 없더라도 null은 아니다. (크기는 0)
System.out.println("크기" + list.size());
if(list.size() == 0)
list.add(-1);
int[] answer = new int[list.size()];
int cnt = 0;
for(int a : list ){
answer[cnt++] = a;
}
return answer;
}
}
풀이 방법 2) stream의 filter 기능을 이용하여 간단하게 구현하였다. (프로그래머스 다른 사람들의 풀이 가장 상단에 위치)
import java.util.Arrays;
class Divisible {
public int[] divisible(int[] array, int divisor) {
return Arrays.stream(array).filter(factor -> factor % divisor == 0).toArray();
}
}
꽤 오래된 Java책으로 공부를 하다 보니 Java8 버전에서 새로 추가된 스트림(Stream)이 책 내용에 없었다.
이전에도 어떤 문제풀이를 스트림으로 간단하게 해결하는 풀이를 본 적이 있었는데, 그때는 Java 자체가 너무 익숙지 않은 상황이라 도저히 스트림을 공부할 엄두가 안 났다. 하지만 이제는 조금 Java가 익숙해졌으니(아직 한참 멀었지만!!!) 스트림을 공부해야겠다고 생각했다. 주말에 스트림 공부를 진행하고 블로그에 요약해서 글을 올려볼까 한다.
728x90