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

[39] JAVA 뒤에서 5등 위로

유혁스쿨 2023. 11. 16. 17:31
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의 매개변수
      1. 복사할 대상 원본 배열
      2. 원본 배열로 부터 복사할 범위 초기 인덱스
        • 해당 인덱스를 포함한다.
      3. 원본 배열로 부터 복사할 범위 최종 인덱스
        • 해당 인덱스를 포함하지 않는다.

[다른 풀이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
반응형