오늘은 "마지막 두 원소"라는 문제를 풀어봤다. 이 문제는 배열의 마지막 원소와 그 직전 원소를 비교해서 조건에 따라 새로운 값을 추가하는 거였는데, 처음엔 엄청 간단해 보였다. 근데 막상 풀다 보니 Java의 배열 크기 고정 문제 때문에 좀 헤맸다. 처음 접근은 그냥 배열 끝에 값을 추가하려고 했는데, Java 배열은 크기가 고정이라 바로 막혔다. 그래서 ArrayList를 써서 동적으로 값을 추가하기로 했다. 코드를 짜면서 마지막 인덱스와 그 직전 인덱스를 정확히 잡아내는 게 중요했는데, 여기서 실수로 인덱스 계산을 잘못해서 계속 에러가 났었다. 특히 num_list.length - 1 같은 부분을 헷갈려서 디버깅하느라 시간 좀 잡아먹었다.

int lastIdx = num_list.length - 1;
int secondLastIdx = num_list.length - 2;
if(num_list[lastIdx] > num_list[secondLastIdx]){
    list.add(num_list[lastIdx] - num_list[secondLastIdx]);
} else {
    list.add(num_list[lastIdx] * 2);
}
return list.stream().mapToInt(Integer::intValue).toArray();

이렇게 풀었는데, ArrayList를 배열로 변환할 때 stream을 처음 써봤다. 처음엔 그냥 for 루프 돌려서 배열에 넣으려고 했는데, stream 쓰니까 코드가 훨씬 깔끔해졌다. 근데 솔직히 ArrayList 없이 배열을 복사해서 늘리는 방법도 있었을 것 같아서 나중에 그 방식도 공부해봐야겠다. 그리고 인덱스 관리할 때 좀 더 꼼꼼히 확인하는 습관을 들여야겠다.