정답 1
IntStream 에 range 를 사용해 주어진 num1, num2 인덱스 만큼의 numbers 요소를 map 을 통해 공정해준뒤 toArray() 메서드를 사용해 int[] 배열러 만들어 return 해주었다.
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
return IntStream.range(num1, num2+1).map(num -> numbers[num]).toArray();
}
}
여기서 한가지!
IntStream, LongStream 에는 range 외에 rangeClosed 라는 메서드 또한 존재한다.
상기 답안에서는 rangeClosed 를 사용하는게 좀더 깔끔했을 것이다. 그럼 뒤에 num2 + 1 을 해줄필요가 없기 때문이다.
range 는 종료값을 포함하지 않지만 rangeClosed 는 종료값을 포함한다.
그래서 range 1, 3 은 -> [1, 2] 인 반면 rangeClosed 1, 3 은 -> [1, 2, 3] 인 것이다.
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
return IntStream.rangeClosed(num1, num2).map(num -> numbers[num]).toArray();
}
}
이렇게 되는게 깔끔하다.
결과는 정답이었다!!
자신감있게 다른사람들의 답을 보았다. 와!! Array 에 copyOfRange
라는게 있었다.
정답 2
import java.util.*;
class Solution {
public int[] solution(int[] numbers, int num1, int num2) {
return Arrays.copyOfRange(numbers, num1, num2 + 1);
}
}
와,, 너무 깔끔하다.
Arrays.copyOfRange(T [ ], int from, int to) : Copies the specified range of the specified array into a new array.
-> 인자로 받은 array의 index int from 에서 int to 바로 전까지의 array를 copy 하여 새로운 array에 담아서 반환.
copyOfRange
도 잘 기억해두면 금방 요긴하게 사용할 때가 있을 것 같다.
'프로그래머스 - 코딩테스트' 카테고리의 다른 글
[Java][프로그래머스] - LVL.0 문자 반복 출력하기 (0) | 2023.01.25 |
---|---|
[Java][프로그래머스] - LVL.0 최댓값 만들기(1) (0) | 2023.01.25 |
[Java][프로그래머스] - LVL.0 머쓱이보다 키 큰 사람 (0) | 2023.01.24 |
[Java][프로그래머스] - LVL.0 삼각형의 완성조건(1) (0) | 2023.01.24 |
[Java][프로그래머스] - LVL.0 배열 뒤집기 (1) | 2023.01.23 |