Search

34. 콜라츠 수열 만들기

내 답안
import java.util.ArrayList; import java.util.List; class Solution { public int[] solution(int n) { List<Integer> list = new ArrayList<>(); list.add(n); while (n != 1) { if (n % 2 == 0) { n /= 2; } else { n = 3 * n + 1; } list.add(n); } int[] arr = new int[list.size()]; for (int i = 0; i < list.size(); i++) { arr[i] = list.get(i); } return arr; } }
Java
복사
다른 사람 풀이법
import java.util.stream.IntStream; class Solution { public int[] solution(int n) { return IntStream.concat( IntStream.iterate(n, i -> i > 1, i -> i % 2 == 0 ? i / 2 : i * 3 + 1), IntStream.of(1)) .toArray(); } }
Java
복사
import java.util.LinkedList; import java.util.Queue; class Solution { public int[] solution(int n) { Queue<Integer> answer = new LinkedList<>(); while (n > 1) { answer.add(n); if (n % 2 == 0) n >>= 1; else n = n * 3 + 1; } answer.add(1); return answer.stream().mapToInt(i -> i).toArray(); } }
Java
복사
import java.util.*; import java.util.stream.Stream; class Solution { public int[] solution(int n) { return Stream.iterate(n, i -> i >= 1, i -> i == 1 ? 0 : i % 2 == 0 ? i / 2 : 3 * i + 1).mapToInt(Integer::intValue).toArray(); } }
Java
복사
import java.util.stream.*; class Solution { public int[] solution(int start, int end) { return IntStream.rangeClosed(start, end).toArray(); } }
Java
복사
Stream.iterate() 과 IntStream.iterate() 에 의미있는 차이점은 없고 i 가 1 일 때 0 으로 보내서 종결시키는 조건이 핵심