본문 바로가기

코딩테스트

프로그래머스 코딩테스트 마지막 두 원소

마지막 두 원소 JAVA

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

문제 설명 : 정수 리스트 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