마지막 두 원소 JAVA
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
문제 설명 : 정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
해결 코드 :
class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[(num_list.length)+1];
int lastNum = num_list[(num_list.length)-1] > num_list[(num_list.length)-2] ?num_list[(num_list.length)-1] - num_list[(num_list.length)-2] :num_list[(num_list.length)-1] * 2;
for (int i=0; i < num_list.length; i++) {
answer[i] = num_list[i];
}
answer[num_list.length] = lastNum;
return answer;
}
}
에러가 계속 났던 지점 :
ArrayIndexOutOfBoundsException 에러가 났었다. 배열의 크기를 n이라고 했을 때, 배열 인덱스는 1부터 n까지가 아니라, 0부터 n-1까지이다. 그래서 배열의 마지막 인덱스값은 num_list[num_list.length - 1] 이렇게 줘야 함!
그리고 for문 대신에 System.arraycopy() 함수를 사용할 수도 있다.
System.arraycopy(num_list, 0, answer, 0, num_list.length);
System.arraycopy 사용법 : System.arraycopy(src, srcPos, dest, destPos, length)
- src: 복사할 원본 배열입니다. 원본 배열의 내용이 복사됩니다
- srcPos: 복사를 시작할 원본 배열의 시작 위치입니다. 복사를 시작할 인덱스를 지정합니다.
- dest: 복사한 내용을 저장할 대상 배열입니다. 원본 배열의 내용이 대상 배열로 복사됩니다.
- destPos: 복사한 내용을 저장할 대상 배열의 시작 위치입니다. 복사한 내용을 저장할 인덱스를 지정합니다.
- length: 복사할 요소의 개수입니다. 복사할 요소의 개수를 지정합니다.
System.arraycopy 예제 :
int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[6];
System.arraycopy(src, 0, dest, 1, 5);
결과 : dest 배열은 {0, 1, 2, 3, 4, 5}가 됩니다.
728x90
300x250