코딩테스트 - 프로그래머스/Lv. 0

[68] JAVA 카운트 다운

유혁스쿨 2023. 11. 27. 16:37
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
반응형