성장일기

내가 보려고 정리하는 공부기록

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

[프로그래머스] 뒤에서 5등 위로 (copyOfRange, stream.skip) - JAVA

와나나나 2023. 10. 15. 13:00
728x90

프로그래머스 _ 코딩 기초 트레이닝 DAY 21 - (1)

출처 -https://school.programmers.co.kr/learn/courses/30/lessons/181852

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 | 정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

입력 #1 | [12, 4, 15, 46, 38, 1, 14, 56, 32, 10]

출력 #1 | [15, 32, 38, 46, 56]


>> 풀이 <<

주어진 배열을 오름차순 정렬 한 후에 앞 5개를 제외하고 자르면 된다.

 

  • 배열 오름차순 정렬하기 - Arrays.sort(arr)
    • stream에서는 sorted를 사용하니 헷갈리지 말기!
  • 배열 자르기 - Arrays.copyOfRange(arr,startIdx,endIdx)
    • Arrays.copyOfRange(arr,startIdx,endIdx)는 arr을 startIdx부터 endIdx 직전까지 잘라내는 메소드이다. 
    • 배열은 바꿀 수 없기 때문에 새로운 배열인 int[]를 리턴한다

풀이는 같지만 스트림을 사용하는지, 배열을 사용하는지에 따라 다르게 쓸 수 있다.

 

1. 배열 이용

import java.util.Arrays;

class Solution {
    public int[] solution(int[] num_list) {
        Arrays.sort(num_list);
        return Arrays.copyOfRange(num_list, 5, num_list.length);
    }
}

러닝타임은 대략 0.5ms 이내로 나왔다.

 

2. 스트림 이용

스트림의 skip() 메소드를 이용했다.

skip은 인수로 받은 숫자만큼을 제외한 스트림을 리턴한다.

 

import java.util.*;

class Solution {
    public int[] solution(int[] num_list) {
        return Arrays.stream(num_list).sorted().skip(5).toArray();
    }
}

러닝타임은 대략 6~7ms정도로 나왔다.

 

복잡한 코드가 아니라면 stream보다는 배열 자체를 활용하는게 좋을 거 같다!