- RxJava 2.0.7
- Eclipse Gradle Project
개미 수열을 푸는 10가지 방법 을 읽다가 Rx로 해보자는 생각으로 만들어 봤음
1. 개미수열
1 11 12 1121 122111 … 수열은 이전 수열에 의해 생성되는데, 이전 수열의 구성과 반복되는 개수를 조합하여 나타낸다.
(예) 1121 다음 수열은 1이 2번 반복되고 2가 1번, 1이 한번 나오므로 122111 이 된다.
2. 수열생성
1121 에서 다음 수열을 만들어 내는 방법
그룹화
같은 숫자가 반복되는 경우에 따라 나눈다 : 11 , 2 , 1
숫자와 반복 회수로 구성한다. : 12 , 21 , 11
합치기
11, 21, 11 을 하나의 수열로 합친다. : 112111
재귀
결과로 얻은 수열을 다음 수열 계산을 위한 입력으로 사용한다.
3. RxJava 로 처리
- 수열은 String 으로 처리했음
그룹화
구룹화된 구성을 전달하는 Observable 을 만든다.
1 | Observable.create(emitter -> { |
합치기
그룹화 되어 전달되는 값을 합치는데 reduce 를 사용했다.
1 | Observable.fromArray(new String[] {"12", "21", "11"}) |
재귀
- 여기서 Subject를 사용했는데, subject를 subscript 한 곳에서 다음 개미수열을 생성하고 onNext 로 전달하여 subject의 다음 입력값으로 사용한다.
- 수열의 처음은 “1”로 시작하므로 기본값 “1”을 가진 BehaviorSubject 를 사용한다.
1 | BehaviorSubject.createDefault("1").subscribe(curr -> { |