마지막 두 원소
정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
2 ≤ num_list의 길이 ≤ 10
1 ≤ num_list의 원소 ≤ 9
💻 풀이
새로운 배열을 선언해 파라미터로 받은 배열의 값을 복사해 넣어준다.
이때 copyOf()를 사용해 복사를 진행하는데, 마지막 값을 하나 추가해주기 위해 크기는 주어진 배열 길이 + 1로 설정해준다.
이후 배열 속 원소 값의 크기를 비교해 적절한 값을 새로운 배열에 마지막 index에 넣어준다.
별도의 반복문 없이 함수로 진행할 수 있는 방법이다.
⌛ 시간 0.02ms ~ 0.03ms
public int[] solution1(int[] num_list) {
int len = num_list.length;
int[] arr = Arrays.copyOf(num_list, len + 1);
arr[len] = (num_list[len -1] > num_list[len - 2]) ?
num_list[len -1] - num_list[len - 2] : num_list[len -1] * 2;
return arr;
}
💻 풀이
만약 copyOf() 함수가 기억이 안나고 반복문도 사용하고 싶지 않다면 stream을 사용해 풀어줄 수 있다. 😅😅
먼저 List를 만들어주면서 기존 배열의 값을 list에 넣어준다.
값을 넣기 위해 stream을 사용해주는데 boxed()를 이용해 int -> Integer 로 바꿔 사용해주고
배열을 List로 만들기 위해서 collect()를 사용해 변환해준다.
이후 위에 배열방법에서 사용한 방법처럼 배열 속 값을 비교해 적절한 값을 List에 add 해준다.
마지막으로 다시 int[]로 리턴하기 위해서 mapToInt()로 다시 int로 변환해주고 toArray()를 이용해 list를 배열로 변환해 리턴한다.
⌛ 시간 2.94ms ~ 5.01ms
public int[] solution(int[] num_list) {
List<Integer> list = Arrays.stream(num_list).boxed().collect(Collectors.toList());
int len = num_list.length;
list.add((num_list[len -1] > num_list[len - 2]) ?
num_list[len -1] - num_list[len - 2] : num_list[len -1] * 2);
return list.stream().mapToInt(Integer::valueOf).toArray();
}