728x90
반응형
문제 설명
정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.
제한사항
- 6 ≤ num_list의 길이 ≤ 30
- 1 ≤ num_list의 원소 ≤ 100
입출력 예
num_list | result |
[12, 4, 15, 46, 38, 1, 14, 56, 32, 10] | [15, 32, 38, 46, 56] |
입출력 예 #1
- [12, 4, 15, 46, 38, 1, 14, 56, 32, 10]를 정렬하면 [1, 4, 10, 12, 14, 15, 32, 38, 46, 56]이 되고,
앞에서 부터 6번째 이후의 수들을 고르면 [15, 32, 38, 46, 56]가 됩니다.
[나의 풀이]
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
Arrays.sort(num_list);
return Arrays.copyOfRange(num_list, 5, num_list.length);
}
}
[풀이과정]
- Arrays 클래스의 sort(T[] arg) 를 통해 배열을 오름차순 정렬.
- Arrays 클래스의 copyOfRange(T[] org, startIdx, endIdx)를 활용하여 지정 범위만큼의 배열을 복사하여 반환
- copyOfRange의 매개변수
- 복사할 대상 원본 배열
- 원본 배열로 부터 복사할 범위 초기 인덱스
- 해당 인덱스를 포함한다.
- 원본 배열로 부터 복사할 범위 최종 인덱스
- 해당 인덱스를 포함하지 않는다.
- copyOfRange의 매개변수
[다른 풀이1]
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
return Arrays.stream(num_list).sorted().skip(5).toArray();
}
}
- Arrays.stream(배열)을 통해 배열을 Stream으로 변환한다.
- IntStream의 sorted()를 통해 오름차순 정렬한다.
- IntStream .stream 의 skip(idx)를 통해 배열의 첫 요소부터 해당 인덱스까지 건너뛴다.
- toArray()를 통해 배열을 다시 반환한다.
boxed()를 하지 않는 이유는 boxed()는 primitive 타입 배열을 collect(Collectors.toList())로 변환할때
boxed()를 하지 않을 경우 List의 제너릭이 <기본타입 []>로 되므로 그럴경우 boxed를 사용하여 Wrapper타입으로 래핑하는 예가 있다.
현재는 배열을 다시 배열로 반환하므로 하지 않는다.
(+) Arrays.stream(배열)을 통해 반환된 Stream은 IntStream이다.
이는 아래와 같이 IntStream로 대신할 수 있다.
IntStream.of(num_list).sorted().skip(5).toArray();
[다른 풀이2]
import java.util.Arrays;
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] num_list) {
Arrays.sort(num_list);
return IntStream.range(5, num_list.length()).map(idx -> num_list[idx]).toArray();
}
}
- Arrays.sort(new int[] {})를 통해 오름차순 정렬
- IntStream의 range를 통해 정수 5 부터 배열길이까지의 순차 스트림를 반환한다.
- map()을 통해 5부터 배열길이까지 순차적으로 리턴받는다.
- toArray()를 통해 배열로 변환한다.
(+) Arrays.sort() 대신 Arrays.stream()을 활용하여 정렬도 가능하다.
return Arrays.stream(IntStream.range(5, num_list.length).map(idx -> num_list[idx]).toArray()).sorted().toArray()
(+) InputStream을 사용할때 바로 sorted를 할 수 있었다... 굳이 다시 변환하지 않고 sorted먼자 한다음 배열로 반환해주자
return IntStream.range(5, num_list.length).map(index -> num_list[index]).sorted().toArray();
728x90
반응형
'코딩테스트 - 프로그래머스 > Lv. 0' 카테고리의 다른 글
[41] JAVA 배열 원소의 길이 (0) | 2023.11.17 |
---|---|
[40] JAVA 문자열 뒤집기 (0) | 2023.11.16 |
[38] JAVA 아이스 아메리카노 (0) | 2023.11.16 |
[37] JAVA 꼬리 문자열 (0) | 2023.11.16 |
[36] JAVA 최대값 만들기(1) (0) | 2023.11.16 |