728x90
반응형
문제설명
정수 start_num와 end_num가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
- 0 ≤ end_num ≤ start_num ≤ 50
입출력 예
start_num | end_num | result |
10 | 3 | [10, 9, 8, 7, 6, 5, 4, 3] |
입출력 예 #1
- 10부터 3까지 1씩 감소하는 수를 담은 리스트는 [10, 9, 8, 7, 6, 5, 4, 3]입니다.
[나의 풀이]
import java.util.stream.IntStream;
import java.util.Collections;
import java.util.stream.Collectors;
import java.util.List;
class Solution {
public List<Integer> solution(int start, int end_num) {
List<Integer> numbers = IntStream.ranageClosed(end_num, start).boxed().collect(Collectors.toList());
Collections.reverse(numbers);
return numbers;
}
}
[다른 풀이]
import java.util.stream.IntStream;
import java.util.Comparator;
class Solution {
public int[] solution(int start, int end_num) {
return IntStream.rangeClosed(end_num, start)
.boxed()
.sorted(Comparator.reverseOrder())
.mapToInt(el->el)
.toArray();
}
}
Stream<T> sorted(Comparator<? super T> comparator)
위 메소드는 Stream에 존재하기 때문에 사용하기 위해서는 IntStream에서 boxed()를 통해 Wrapper로 씌움으로써 Stream<Integer>타입으로 변환해야한다.
Comparator.reverseOrder()
public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
return Collections.reverseOrder();
}
비교기 인터페이스 reverseOrder()는 Collections reverseOrder()를 반환한다.
Collections의 reverseOrder()
public static <T> Comparator<T> reverseOrder() {
return (Comparator<T>) ReverseComparator.REVERSE_ORDER;
}
private static class ReverseComparator
implements Comparator<Comparable<Object>>, Serializable {
@java.io.Serial
private static final long serialVersionUID = 7207038068494060240L;
static final ReverseComparator REVERSE_ORDER
= new ReverseComparator();
public int compare(Comparable<Object> c1, Comparable<Object> c2) {
return c2.compareTo(c1);
}
@java.io.Serial
private Object readResolve() { return Collections.reverseOrder(); }
@Override
public Comparator<Comparable<Object>> reversed() {
return Comparator.naturalOrder();
}
}
내부적으로 직렬화, compare(), compareTo 등을 통해 역순으로 정렬한다.
Collections.reverseOrder()도 가능하다.
728x90
반응형
'코딩테스트 - 프로그래머스 > Lv. 0' 카테고리의 다른 글
[70] JAVA 문자열을 정수로 변환하기 (1) | 2023.11.27 |
---|---|
[69] JAVA 문자열의 뒤의 n글자 (0) | 2023.11.27 |
[67] JAVA 카운트 업 (0) | 2023.11.27 |
[66] JAVA 정수부분 (1) | 2023.11.27 |
[65] JAVA 배열 자르기 (1) | 2023.11.27 |