내 답안
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 으로 보내서 종결시키는 조건이 핵심