[프로그래머스 1단계] 알고리즘 11. 나누어 떨어지는 숫자 배열
문제 출처는 프로그래머스 알고리즘 연습 에서 볼 수 있습니다!(https://programmers.co.kr/learn/challenges)
알고리즘 11. 나누어 떨어지는 숫자 배열:
divisible 메소드는 int형 배열 array와 int divisor를 매개변수로 받습니다.array의 각 element 중 divisor로 나누어 떨어지는 값만 포함하는 새로운 배열을 만들어서 반환하도록 divisible에 코드를 작성해 보세요.예를들어 array가 {5, 9, 7, 10}
이고 divisor가 5이면 {5, 10}
을 리턴해야 합니다.
풀이:
오랜만에 자바를 보니 반갑다. 나는 알고리즘 혹은 서버를 작성해야 할 때는 일반 명령형 프로그래밍보다 함수형 프로그래밍이 더 좋다고 생각하는 편이다. 왜냐하면 코드가 간편한 것도 있지만 어떤 문제가 닥칠 수 있는 예외 상황들(레이스 컨디션 등의)을 배제하고 코드를 짤 수 있기 때문이다. 일단 이 문제는 주어진 배열에서 divisor로 나누어 떨어지는 수들을 다시 새로운 배열로 모으는 것이 핵심이다. 먼저 나의 코드는 다음과 같다.
먼저 이 문제를 풀기 위해 자바8의 Stream API를 이용할 생각이다. 자바에서 일반 스트림은 객체 타입만 지원한다. 즉 int, byte, char 등은 일반 스트림에 사용할 수 없다. 때문에 이들 기본형에 대한 Stream API를 따로 만들어두었는데 그 중 하나가 IntStream이다. 먼저 코드를 보면서 살펴보자.
먼저 IntStream.of(배열)은 주어진 배열로 IntStream을 만들어낸다. 그 후 일반 스트림과 사용법은 같다.
IntStream.filter()를 이용하여 스트림 요소들 중 divisor로 나누어 떨어지는 요소들을 필터링시킨다.
그 후 IntStream.toArray() 메소드를 이용하여 필터링 된 IntStream을 배열로 바꿔서 반환하면 된다.
항상 알고리즘을 새로운 방식으로 풀었을 때 그 쾌감은 참 좋으디 좋으디 ㅋㅋㅋ 조금 더 높은 난이도의 문제를 이처럼 함수형으로 풀어보고 싶다!